問題タブ [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 - XCode 3 に OCUnit をインストールする際の問題
XCode 3 を使用して MAC および iPhone アプリを開発しています。2 つのシステムの構造を大幅に変更することを考えているため、最初に単体テストを行う必要があります。さまざまな可能性についてインターネットで閲覧したときに、XCode の Text Bundle と GTM (Google Toolbox for MAC) のどちらも機能しなかったため、OCUnit で試してみました。OCUnit のホーム パッケージとルート パッケージの両方をダウンロードしてインストールしましたが、XCode IDE に変更がありません。
誰かがそれをインストールするように私を案内してもらえますか?
前もって感謝します。
objective-c - ocUnit で NSArray の比較を行う
私はocUnitが初めてで、2つの配列をSTAssertTrueメソッドと==で比較しようとしています。
以下のテストは、単にテスト中のシステム (sut) に配列を要求するだけです。
次に、本番コード内で同じ配列を返すだけです
しかし、テストを実行すると失敗します。これらのオブジェクトを比較して、それらが同じかどうかを確認するにはどうすればよいですか?
前もって感謝します
objective-c - ocUnit を使用して位置情報の単体テストを作成する方法
現在、緯度と経度の値を NSString として保持する単純なオブジェクトを使用しています。しかし、それらが等しいと主張しようとすると、このアプローチで失敗します
ここに表示されるエラーです
エラー: -[LocationParseJsonTest testLocationParseJson]: '41.6756668' は '41.6756668' と等しくなければなりません実際の場所の緯度は 41.6756668 でした
代わりに、「isEqual」を使用して AssertTrue アプローチを試しました
そして、私は同じエラーが発生します
エラー: -[LocationParseJsonTest testLocationParseJson] : "[expectedLocation.lat isEqual: actualLocation.lat]" は true である必要があります。実際の場所の緯度は 41.6756668 でした
これらの NSString 値を ocUnit で比較するにはどうすればよいですか? これは場所fyiの.hファイルです
objective-c - OCUnit での UIImageView エラー
OCUnit を使用してアプリケーションをテストしていますが、問題が発生しています。UIImageView 型のインスタンス変数を含むクラスをインクルードしようとすると、次のエラーが表示されます:「UIImageView の前に指定子修飾子リストが必要です」
私の宣言コードは次のとおりです。
これは、テスト ターゲットを使用してアプリケーションをビルドしようとしたときにのみ発生します。
ありがとう
iphone - iPhone アプリケーションの単体テストを実行およびデバッグする方法
注: 最近では、単体テストのセットアップがはるかに簡単になっています。このチュートリアルは、Xcode バージョン 5 以降にはあまり関係ありません。
かなり時間がかかりましたが、ようやく自分のプロジェクトで機能させることができました。「ロジック」テストを作成するために、ロジック テストの作成に関する Apple のガイドラインに従いました。ロジック テストがビルド中に実行されることを理解すれば、これは問題なく機能します。
これらのテストをデバッグできるようにするには、それらのテストを呼び出すカスタム実行可能ファイルを作成する必要があります。Grokking Cocoa ブログの Sean Miceliによる記事には、これを行うためのすべての情報が記載されています。ただし、それに従ってもすぐに成功するわけではなく、微調整が必要でした。
Sean のチュートリアルに示されている主な手順を説明し、理解するのに時間がかかった「ダミー用」の概要を説明します。
- 単体テストを含むターゲットをセットアップしますが、実行しません
- テストを実行するために otest 実行可能ファイルをセットアップします
- otest 環境変数をセットアップして、otest が単体テストを見つけられるようにします。
以下はXCode 3.2.5で実行されました
XCode 4 に関する注意
XCode 4 では、単体テストを直接デバッグできます。テストを作成し、テストの 1 つとしてターゲットに追加し、ブレークポイントを設定するだけです。それで全部です。もっと来ます。
ステップ 1 - ターゲットの設定
- プロジェクトのターゲットの下にある単体テストのターゲットを複製します。これにより、単体テスト製品 (.octest ファイル) の複製も作成されます。下図の「LogicTest」が本来のターゲットです。
- 単体テスト ターゲットと単体テスト プロダクト (.octest ファイル) の両方の名前を同じ名前に変更します。下図の「LogicTestsDebug」が重複対象です。
- 新しいターゲットの RunScript フェーズを削除します
両方の名前は何でもかまいませんが、スペースは避けます。

ステップ 2 - otest のセットアップ
ここで最も重要な点は、正しい otest を取得することです。つまり、デフォルトの Mac バージョンではなく、現在の iOS 用のものです。これは、ショーンのチュートリアルで詳しく説明されています。以下に、物事を正しく設定するのに役立ついくつかの詳細を示します。
- Project->New Custom Executable に移動します。これにより、実行可能ファイル名と実行可能ファイルのパスを入力するよう求めるウィンドウが開きます。
- 名前は何でも入力してください。
- iOS otest 実行可能ファイルへのパスをコピーして貼り付けます。私の場合、これは /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/Developer/usr/bin/otest でした
- 入力を押します。これにより、実行可能ファイルの構成ページが表示されます。
- この時点で変更する唯一のことは、「パス タイプ: 現在の SDK に相対」を選択することです。パスは入力しないでください。これは手順 3 で入力したものです。

ステップ 3 - otest 引数と環境変数の設定
otest の引数は簡単に設定できます... しかし、これが私の最大の問題であることが判明しました。私は当初、自分のロジック テスト ターゲットに「LogicTests Debug」という名前を付けていました。この名前と「LogicTests Debug.octest」(引用符付き) を otest の引数として使用すると、otest は終了コード 1 で終了し、コードに停止することはありません...
解決策: ターゲット名にスペースを入れないでください!
otest の引数は次のとおりです。
- -SenTest Self (または All またはテスト名 - ターミナルで man otest と入力してリストを取得)
- {LogicTestsDebug}.octest - {LogicTestsDebug} はロジック テスト バンドル名に置き換える必要があります。
コピー/貼り付け用の環境変数のリストは次のとおりです。
- DYLD_ROOT_PATH: $SDKROOT
- DYLD_FRAMEWORK_PATH: "${BUILD_PRODUCTS_DIR}: ${SDK_ROOT}:${DYLD_FRAMEWORK_PATH}"
- IPHONE_SIMULATOR_ROOT: $SDKROOT
- CFFIXED_USER_HOME: "${HOME}/Library/Application Support/iPhone Simulator/User"
- DYLD_LIBRARY_PATH: ${BUILD_PRODUCTS_DIR}:${DYLD_LIBRARY_PATH}
- DYLD_NEW_LOCAL_SHARED_REGIONS: はい
- DYLD_NO_FIX_PREBINDING: はい
DYLD_FORCE_FLAT_NAMESPACE も試しましたが、これは単純にクラッシュしました。

ステップ 4 - otest 実行可能ファイルの実行
otest 実行可能ファイルを実行してテストのデバッグを開始するには、次のことを行う必要があります。
- アクティブ ターゲットを単体テスト ターゲット (私の場合は LogicTestsDebug) に設定します。
- アクティブな実行可能ファイルを otest 実行可能ファイルに設定します
実行可能ファイルをビルドして実行し、ブレークポイントを使用してテストをデバッグできます。
補足として、otest 実行可能ファイルの実行に問題がある場合は、以下に関連している可能性があります。
- 間違ったパス。私は mac otest を指していたので、最初は多くの問題がありました。起動時に終了コード 6 でクラッシュし続けました。
- 間違った引数。バンドル (.octest) 名からスペースを削除するまで、終了コード 1 で otest がクラッシュし続けました。
- 環境変数のパスが間違っています。Sean のチュートリアルには、他の人が試したことについての洞察を提供するフォローアップの質問がたくさんあります。私が今持っているセットは機能しているように見えるので、これから始めることをお勧めします.
環境変数に問題があると思われるメッセージがコンソールに表示される場合があります。CFPreferences に関するメッセージが表示される場合があります。このメッセージは、テストの適切な実行を妨げているわけではないので、otest の実行に問題がある場合は、このメッセージに集中しないでください。

最後に、すべてが機能していれば、テストのブレークポイントで停止できます。

最後に一つだけ...
多くのブログで、統合された XCode SenTestKit の主な制限は、アプリケーションのビルド中にテストを実行できないことであると読みました。結局のところ、これは実際には非常に簡単に管理できます。アプリケーション プロジェクトへの依存関係としてロジック テスト バンドルを追加するだけです。これにより、ロジック テスト バンドルが確実にビルドされます。つまり、アプリケーションがビルドされる前に、すべてのテストが実行されます。
これを行うには、ロジック テスト バンドルをアプリケーション ターゲットにドラッグ アンド ドロップします。

xcode - OCunit テストを XCode 4 ですぐにコンパイルできるようにするために何かをする必要がありますか?
今日、XCode 4 を (Apple mac アプリ ストアを使用して) インストールし、新しい Mac OS アプリケーションを作成し、テスト モードに切り替えて、生成されたテスト スケルトン コードをビルドしようとしました。ここで失敗しました:
mytests.h で:
エラーは次のとおりです。
file://..mytests.h: error: Lexical or Preprocessor Issue: 'SenTestingKit/SenTestingKit.h' file not found
ここで、端末からロケートを使用して SenTestingKit.h を見つけると、それが /Developer-old/Library/Frameworks フォルダー (XCode 4 インストーラーが /Developer フォルダーの名前を変更したもの) の下にあることに気付きました。新しい /Developer/Library/Frameworks はありません。そして、開発者の古いディスク以外に、ディスクに SenTestingKit.framework が見つからないようです。
調子はどう?SenTestingKit.framework は XCode 4 に同梱されていないようです。
アップデート:
さらに、私の古い SenTestingKit フレームワークを XCode 3 から /Developer/Library/Frameworks にコピーすると、ある程度はビルドされますが、期待どおりに動作しません。ダミー テストは単に失敗するように設計されていますが、「テストを実行」すると、通常のココア アプリ ドキュメント ウィンドウが開くだけで、テストが失敗したことを示すものはありません (意図したとおりです)。
これはかなり悪いです。単体テストを失敗させることができません。それは私にとって通常の状況ではありません。
objective-c - OCUnitリンクの問題の質問
クラスの単体テストを書きたいのですが、リンクの問題を解決できません。テストヘッダーで#import"myclass.h"を実行しましたが、テスト実装ファイルでmyclassオブジェクトを割り当てると、シンボルが見つかりませんでした。私はすでに依存関係を追加しました。
何か案は?
objective-c - テストされていないクラスでエラーを与えるOCUnitテスト
Xcode 3.2で正常に実行されたOCUnitテストを作成しましたが、Xcode 4で問題が発生しています。これは、クラスまたは関数(ライブラリ関数以外)を呼び出さないクラスX内の単一の静的関数をテストします。 A)。呼び出す必要がある他のコードは、2つの静的変数を初期化する静的コンストラクターだけですが、これらは他のクラスやクラスの関数を呼び出さないハードコード値(配列)ですA。
それでも、 _OBJC_CLASS _ $ _ ClassB "を解決するために、インポートするすべてのクラス、およびそれらがインポートするすべてのクラスの.m、.mm、および.cファイルを含める必要がありました。 Xcode 3でそのいずれかを実行する必要があったことを思い出してください。ただし、問題なく、コンパイルできました。これで、クラスBのから発生するエラーが発生し+[B initialize]ます。
静的コンストラクターが、まったく参照されていないクラスで呼び出されるのはなぜですか?理想的には、テストに対応するためにクラスを変更せずに、これを修正するにはどうすればよいですか?
アップデート
何が起こっているのかをさらに理解するために、私はすべてのテストケースをコメントアウトし、#import "A.h"何が起こるかを確認しました。単純な単体テストを1つ追加しました。
それでも、私の+[B initialize]電話がかかってきて失敗します。OCUnitがすべてのクラスをクロールしているようで、+initializeその過程でそれらのメソッドが呼び出されています。これは私には意味がありません-どうすればこの動作を無効にできますか?
これが役立つ場合に備えて、自分のコードが呼び出される前のスタックトレースです。
iphone - isKindOfClass と NSStringFromClass は UIApplicationDelegate について同意しません
私は iPhone アプリの単純な OCUnit テストで遊んでいましたが、アプリのデリゲートが期待どおりのクラスのインスタンスであることを確認したかっただけです。このテストがあまり役立つとは思っていませんでしたが、Objective C に関する私の誤解が明らかになりました。
最初にデリゲートへの参照を取得します。次に、返されたクラス名をログに記録します。私の場合、出力には「アプリ デリゲートのクラス名は CalculatorAppDelegate です」と正しく表示されます。
しかし、次の行のアサーションが失敗し、その理由がわかりません。
NSStringFromClass() が正しいクラス名を返し、isKindOfClass が false を返すのはどのような状況ですか?
xcode - Xcode 4: コマンドライン (xcodebuild) からテストを実行しますか?
Xcode 4 でまったく新しい iOS プロジェクトを作成し、単体テストを含めました。既定のアプリには、メイン アプリケーションと単体テスト バンドルの 2 つのターゲットがあります。「製品 > テスト」(Command-U) を使用すると、アプリケーションがビルドされ、単体テスト バンドルがビルドされ、iOS シミュレーターが起動され、テストが実行されます。今、コマンドラインから同じことをしたいと思っています。コマンド ライン ツール (xcodebuild) には「テスト」アクションはありませんが、アプリケーション自体に依存するため、単体テスト バンドル ターゲットを直接ビルドできるはずです。ただし、実行中:
次のメッセージが表示されます。
GUI から Command-U を実行すると、Test Host が単体テスト バンドル ターゲットに設定されるため、これは嘘のように思えます。ロジック テストとアプリケーション テストの分離に関する以前の投稿を見たことがありますが、Xcode 4 ではその区別がなくなっているようです。コマンドラインからテストを実行する方法の手がかりはありますか?