問題タブ [ocunit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - フレームワークの OCUnit テスト バンドルを構成する方法は?
Mac OS X フレームワークを開発しており、XCode 3.2.1 プロジェクトで OCUnit を使用したいと考えています。OCUnit テスト バンドルを構成する方法について、いくつかのチュートリアルに従いました。問題は、フレームワークのソースの 1 つで定義されている関数を使用するテスト ケースを作成すると、シンボルが見つからないというビルド エラーが発生することです。
チュートリアルにあるように、プロジェクトのターゲットに依存するテスト バンドルを作成しましたが、問題はないようです。最初に、フレームワークのソース ファイルをテスト バンドル ターゲット内のコンパイル ソース セクションにドラッグすることでこの問題を解決できると考えましたが、そのソース ファイルから参照されているすべてのシンボルがビルド エラーに表示されるようになったため、そうではないようです。良い解決策/アイデアになります。
ユニット テスト バンドルが適切にビルドされるように構成するにはどうすればよいですか?
objective-c - 「抽象」OCUnit テスト クラスを実装またはエミュレートする方法は?
継承階層で編成された多数の Objective-C クラスがあります。それらはすべて、子の間で共有されるすべての動作を実装する共通の親を共有します。各子クラスはそれを機能させるいくつかのメソッドを定義し、親クラスはその子によって実装/オーバーライドされるように設計されたメソッドに対して例外を発生させます。これにより、Objective-C が抽象クラスを明示的にサポートしていなくても、実質的に親が疑似抽象クラスになります (それ自体では役に立たないため)。
この問題の核心は、OCUnit を使用してこのクラス階層を単体テストしていることです。テストは同様に構造化されています。つまり、共通の動作を実行する 1 つのテスト クラスと、テスト対象の各子クラスに対応するサブクラスがあります。ただし、(実質的に抽象化された) 親クラスでテスト ケースを実行することには問題があります。これは、主要なメソッドがないと、ユニット テストが見事に失敗するためです。(5 つのテスト クラスで共通のテストを繰り返すという代替案は、実際には受け入れられる選択肢ではありません。)
私が使用してきた理想的ではない解決策は、(各テスト メソッドで) インスタンスが親テスト クラスであるかどうかを確認し、そうである場合は救済することです。これにより、すべてのテスト メソッドでコードが繰り返されることになり、単体テストが非常に粒度が高い場合、この問題はますます厄介になります。さらに、そのようなすべてのテストは引き続き実行され、成功として報告されるため、実際に実行された意味のあるテストの数が歪められます。
私が望むのは、OCUnit に「このクラスではテストを実行せず、その子クラスでのみ実行してください」というシグナルを送る方法です。私の知る限り、それを行う方法は(まだ)ありません+(BOOL)isAbstractTest。実装/オーバーライドできる方法に似ています。最小限の繰り返しでこの問題を解決するためのより良い方法についてのアイデアはありますか? OCUnit には、この方法でテスト クラスにフラグを立てる機能がありますか?それとも、レーダーを提出する時が来ましたか?
編集:問題のテスト コードへのリンクは次のとおりです。簡潔にするためのマクロのif (...) return;使用を含め、メソッドを開始するためにが頻繁に繰り返されていることに注意してください。NonConcreteClass()
objective-c - OCUnit (SenTestingKit) を使用した Xcode Objective-c の警告「存在しないメソッドのセレクターを作成しています」
OCUnit (SenTestingKit) でいくつかの単体テストを作成しようとすると、XCode で次のような警告が表示されるようになりました。
それは私が心配すべきことですか、または何らかのコンパイラフラグによってこれらのタイプの警告を無効にすることはできますか?
iphone - ユニットテストは、アクティブなSDKが「シミュレーター」である場合にのみ自動的に実行されますか?
私は、AppleがiPhoneでの単体テストアプリケーションについて公開している指示に従いました。アクティブなSDKを「iPhoneSimulator」に設定すると、問題なく動作します。アプリケーション自体のビルドの一部として、常にテストをビルドして実行するように構成しました。
Appleは(省略して)これは常に機能するはずだと示唆していますが、アクティブなSDKを「iPhoneデバイス」に設定するとテストはスキップされます。OCMockともリンクしていますが、テストが失敗する代わりに、この警告がビルドログに記録されます。
ld: warning: in .../build/Debug-iphoneos/OCMock.framework/OCMock, missing required architecture arm in file
単体テストバンドルをメインアプリケーションの依存関係にするのは非常に便利なので、これらのテストはすべてのビルドで実行されますが、デバイスのビルド中に機能しない場合、その有用性は大幅に低下します。これは既知ですが、文書化されていない制限ですか?
iphone - iPhone / iPad の単体テストを作成するための最良のアプローチは何ですか?
私はiPadアプリケーションを開発しています。このアプリケーションの単体テストを作成する必要があるかどうか、もしそうならどのように作成すればよいかわかりません。
iPhone / iPad の単体テストを作成するための最良のアプローチとして何を提案しますか?
iphone - ボックスにテキスト/文字列を描画するためのテストケースを作成するにはどうすればよいですか?
長方形の枠で文字列を描いています。文字列は完全に描画されています。次に、センテスティングキットを使用してテストケースを作成する必要があります。どこから始めたらいいのかわからない。ヘルプのために私はiPhoneのサンプル計算アプリケーションも見ました
しかし、まだ種類がありません。
アイデアを持っている体は助けてください。
ありがとう、
マッドハップ
objective-c - 組み込みフレームワークの OCUnit テスト
更新: あきらめて、代わりに GHUnit をプロジェクトに追加しました。ほんの数分で GHUnit を起動して実行することができました。
更新: ここから Xcode プロジェクトをダウンロードできます: http://github.com/d11wtq/Cioccolata
Unit Test ターゲットを Xcode プロジェクトに追加しましたが、ビルド時にフレームワークが見つかりません。
Test.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.
私のフレームワーク (メイン プロジェクト ターゲット) は、組み込み用に設計されているため、インストール パスは@executable_path/../Frameworks.
フレームワークをテスト ターゲットの直接の依存関係としてマークし、「バイナリとライブラリのリンク」ビルド フェーズに追加しました。
さらに、フレームワークを単体テスト バンドルの Frameworks ディレクトリに単純にコピーする「ファイルのコピー」の最初のステップ (依存関係を構築した後) を追加しました。
誰でもこれについて経験がありますか?何を見逃したのかわかりません。
編集 | フレームワークは実行可能ではないため、そうすべきではないと確信していますが、「テスト ホスト」と「バンドル ローダー」を設定していません。テストバンドルはフレームワークに対してリンクされており、他のバンドルと同じようにロードされるため、これは(私の理解では)すべて問題ありません。
編集 | 私はほとんどそこにいると思います。@executable_path の代わりに @rpath の使用を指示する次の記事を読みました。
http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/
この場合、OCUnit テスト バンドルは実行可能ファイルではなく、単純な古いバンドルであるため、@executable_path は互換性がないため、完全に理にかなっています。これで、フレームワークのインストール ディレクトリが に設定され@rpath、テスト ターゲットのランタイム検索パス (rpath) がビルド ディレクトリとして定義されました。これにより、フレームワークをテスト バンドルにコピーする必要がなくなり、結果として得られるフレームワークはどこにでも配置できるため、全体的にはるかに柔軟になります。
ここで、Test ターゲットに Bundle Loader を設定する必要があることにも気付きました。これは、フレームワーク バイナリのパスに設定されています。
テスト ターゲットをビルドし、エラーなしでフレームワークからクラスを #import できます。しかし、フレームワークからクラスをインスタンス化しようとするとすぐに、次のエラーが発生します。
/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386'
/Developer/Tools/RunPlatformUnitTests.include:419: note: Running tests for architecture 'i386' (GC OFF)
objc[50676]: GC: forcing GC OFF because OBJC_DISABLE_GC is set
Test Suite '/Users/chris/Projects/Mac/Cioccolata/build/Debug/Test.octest(Tests)' started at 2010-05-21 12:53:00 +1000
Test Suite 'CTRequestTest' started at 2010-05-21 12:53:00 +1000
Test Case '-[CTRequestTest testNothing]' started.
/Developer/Tools/RunPlatformUnitTests.include: line 415: 50676 Bus error "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}"
/Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Tools/otest' exited abnormally with code 138 (it may have crashed).
Command /bin/sh failed with exit code 1
私のテスト メソッドは、このセットアップのデバッグに役立つように作成した HelloWorld クラスを割り当ててから解放するだけです。
これらのコード行を に置き換えるとSTAssertTrue(YES, @"Testing nothing");、クラスがまだインポートされているにもかかわらず、エラーはなくなります。
objective-c - 単一のテスト メソッドの実行
OCUnit と Xcode を使用して、1 つのテストのみを実行する方法はありますか?
理想的には、テスト メソッドを 1 つだけ実行できればよいのですが、テスト ケースを 1 つだけ実行する方法があれば、それも問題ありません。
私が現在行っているのは、すべてのテストを実行する「テスト」タスクを実行することですが、これには多くの時間がかかり、理想的には他のことをするのに費やすことができます.
unit-testing - コンパイルが失敗したときにOCUnitテストが実行されないようにする
私はXcode3.2.2と組み込みのOCUnitテストのものを使用しています。私が遭遇している問題の1つは、ビルドを実行するたびに、ビルドが失敗した場合でも単体テストが実行されることです。テストの1つで構文エラーが発生したとします。テストはコンパイルに失敗し、単体テストの最後の正常なコンパイルが実行されます。依存ターゲットの1つがビルドに失敗した場合も同じことが起こります。つまり、テストは引き続き実行されます。これは明らかに私が望んでいることではありません。
ビルドが失敗した場合にテストが実行されないようにするにはどうすればよいですか?これが不可能な場合は、テストを自動的に実行しないようにしたいのですが、それは可能ですか?これが明らかな場合は申し訳ありませんが、私はXcodeの初心者です。より良い単体テストフレームワークを使用する必要がありますか?
iphone - iPhone での ocunit テスト
XCode から自分のプロジェクトで ocunit を動作させようとしています。単体テストでもデバッグする必要があるため、セットアップを自動化するスクリプトを使用しています (以下を参照)。リソースの下のプロジェクトに含め、名前を実行したい .ocunit ファイルに変更します。
私が得る問題は、バンドルファイルが見つからないため、エラーが発生することです。XCodeとobjective-cについて手がかりを持っている人は誰でもそれを見て、何が悪いのか教えてもらえますか. また、実行する必要がある .ocunit ファイルをどのように作成すればよいでしょうか。iPhone 用の新しい単体テスト ターゲットを設定し、それにテストを追加することによって、または?
iPhoneの開発を始めたばかりで、すぐに起動して実行する必要があるので、誰かが手がかりを持っていることを願っています