2011-02-03 5 views
3

単体テストプロジェクトの単体テストを成功裏に実行した人はいますか? 他の投稿を読んで、適切なアセンブリへの参照を手動で追加するように指示されています。 これを行うと、プロジェクトはコンパイルされますが、それでもテストは実行されません。単体テストモノトック

私には2つのプロジェクトがあります。 Monotouch Navigationプロジェクト、NUnit Library Projectなどがあります。 私は私のモノタッチプロジェクトへの参照を追加し、モノトゥッチとその他の必要なアセンブリをテストプロジェクトに追加しました。

System.IO.IOException:唯一の罰金を実行しますMonoTouchでアセンブリの外側のコードを実行し テスト、MonoTouchでコードにアクセスするものがで失敗---> System.Net.Sockets.SocketException失敗を書きます:ソケットがシャットダウンされましたSystem.Net.Sockets.Socket.Send(System.Byte [] buf、Int32オフセット、Int32サイズ、SocketFlagsフラグ)[0x00000] in:0 at System.Net.Sockets.NetworkStream.Write (System.Byte []バッファ、Int32オフセット、Int32サイズ)[0x00000] in:0 ---内部例外スタックトレースの終了--- System.Net.Sockets.NetworkStream.Write(System.Byte [])の バッファ、Int32オフセット、Int32サイズ)[0x00000] in:0 at System.IO.BufferedS System.IO.BufferedStream.Dispose(Boolean disposing)[0x00000] in:System.IO.BufferedStream:Flush() で、を返します。 System.IO.Stream.Closeで0 は()[0x00000]で:Mono.Remoting.Channels.Unix.ClientConnection.ProcessMessagesで0 ()[0x00000]:0

Iは言っa postが見つかりました: 「あなたはiPhone上またはiPhoneのシミュレータで実行していない..if、コンポーネントをインスタンス化するために必要なネイティブAPIを呼び出す方法はありません..」

だから何 - 私は本当に不思議は私です現時点でMonotouchで単体テストを行うことは実際に可能ですか、そうでない場合は、他のすべての人が何をしていますか?

ありがとうございます!

答えて

0

これはあなたが見つけた投稿です。これまでのところこれまでにできることは最高です:

  1. OSに依存しないコードを別のライブラリに引き出します。
  2. 独自のプロジェクトファイルを使用して2番目のソリューションを作成し、これらのライブラリをvanilla .NET 3.5としてコンパイルします。
  3. ライブラリをユニットテストします。

これは、あなたの懸念を分離し、(理論的に)MonoDroidにアプリを移植する方が簡単であることを奨励します。しかし、2つのソリューションを同期させておくことは苦痛であり、見えなくなったときに実際にテストを書いてしまうのは簡単です。

+0

これまでのところ、OSコードを別のものから分けてテストできるようにしましたが、私のコードユニットをテスト可能なものにすることはできますが、コントローラを正しくテストすることができず、私の終わりから終わりまでのテスト。私はPheganの投稿に記載されているパターンを試してみようと思います。うまくいけば、私のモノタッチコードをテストしてもらうために参考にしてください。 – TenaciousG

2

実際には、2番目の解決策を作成する必要はなく、OSに依存しないコードを作成する必要はありません。しかしそれにはいくつかのトリックがあります。一般:でも、あなたの.NET 3.5 /モノラルテストプロジェクト

  • AスーパーバイザControllerパターンで

    1. 参考MonoTouchでアセンブリは、あなたがテストできるコードの量に役立ちます。

    これまでのベストプラクティスにいくつか詳しく説明しました。あなたはここにそれを見つけることができます:http://ben.phegan.name/index.php/2011/02/28/monotouch-and-unit-testing

  • +0

    良い投稿です!そこには、「ほとんどの人がMonoTouchの下でテストしている主な問題は、デフォルトで「Add ... Add New Project ... NUnit Library Project」に達するということですが、私はあなたがそれを行うための好ましい方法です。私は、/ Developer .....フォルダ内の正しいアセンブリへの参照をすべて追加してパスを絶対にしてみましたが、それらを実行してもSystem.Net.Sockets.SocketExceptionでクラッシュしました。ソケットがシャットダウンされました。私はSupervisor Controllerのパターンにはまだ行きませんでしたが、良いアイデアのように聞こえます! – TenaciousG

    +0

    あなたがテストしているもののようなサウンドは、まだmonotouch.dll(または試して)から何かをフックしています。単体テストプロジェクトを追加する別の方法はお勧めしませんでした。なぜなら、デフォルトがおそらく最も簡単なので、MonoTouchコードへのインターフェースをきれいにして、必要な参照を明確にする必要があるという警告です。 もっと良い解決策は、特定の "MonoTouch Unit Test"プロジェクトを作成することです。これはまだ利用できませんが、あなたが熱心であればオープンソースです! :) –

    +0

    私は誤って "fixing references"というビットを誤解していました。実際にはmonotouch.dllを使ってコードをテストすることも可能です。あなたのブログに記述されているようにSupervisor Controllerパターンを実装しようとします。 – TenaciousG

    2

    Monotouchプロジェクトの単体テストを成功裏に実行した人はいますか?

    はい、これは最新のMonoTouch 5.1.x(ベータ版)で可能になりました。

    私が言って記事を見つけました:「あなたはiPhone上またはiPhoneのシミュレータで実行していない..if、コンポーネントをインスタンス化するために必要なネイティブAPIを呼び出す方法はありません..」

    これは本当です。このため、iOS(シミュレータまたはデバイス)で実行されているrunnerがMonoTouch関連ユニットテストの実行を可能にするために構築されました。

    0

    はい、可能です。

    には、NUnitLiteプロジェクトの修正バージョンを使用して動作するドキュメントが追加されています。