0

作成中の iOS フレームワークの単体テストを作成しようとしています。内部では、Nuance の Dragon Mobile SDK を使用しています。Jetbrains の AppCode で単体テストを実行すると、次のエラーが発生します。

2012-08-15 17:43:48.874 otest[62547:707] *** Assertion failure in -[KeychainManager writeToKeychain], /checkout_120606-1556/NMSPClient/sdk/c/trunk/solutions/iPhone/NMSP/../../../source/oem/iphone/src/KeychainManager.m:285

Couldn't add the Keychain Item.
Unknown.m:0: error: -[NuanceVoiceRecognizerTest testExample] : Couldn't add the Keychain Item.

XCode でテストを実行すると、正常に動作します。実際、XCode はシミュレーターを起動してテストを実行しますが、AppCode は必要ないようです。

ここで、Nuance ビットが関連する理由は、セットアップ時にキーチェーンを使用して何かを実行しようとしているからです。

[SpeechKit setupWithID:@"<snip>"
    host:@"sandbox.nmdp.nuancemobility.net"
    port:443
    useSSL:NO 
    delegate:self];

ここでの答えの 1 つは、XCode でテストを実行することです。しかし、コード編集の面で XCode がいかに原始的であるかを考えると、XCode には本当に苦労しています。さらに重要なことは、ここでいくつかの重要な概念が欠落しており、それが私を悩ませていることです。

質問に対して: 単体テストの実行時にコードがキーストアにアクセスできない原因は何ですか? XCode であっても、以前にこの種のことに遭遇した人はいますか?

4

2 に答える 2

3

まだ設定されていない場合は、単体テストターゲットのBUNDLE_LOADERおよびTEST_HOSTビルド設定を編集して、アプリバンドル(おそらく$(BUILT_PRODUCTS_DIR)/AppName.app/AppNameなど)を指すようにすることができます。

ここでの私の考えは、おそらく(私はそれを使用していませんが)実行中のアプリ内からキーチェーンアクセスを行う必要があるということです。これらの2つの設定は、OCUnit単体テストをアプリプロセス内で実行するためのものです(つまり、Appleの用語では、「ロジックテスト」ではなく「アプリケーションテスト」を実行します)。

プロジェクトウィザードでXcodeによって設定された単体テストバンドルはアプリケーションテストとして設定されますが、その後に追加されるテストバンドルはロジックテストです。後で単体テストターゲットを追加した場合は、上記のビルド設定がない可能性があります。

Xcodeがテストをそのまま実行する理由について:私のテストから、バンドルローダーとテストホストの設定に関係なく、Xcodeは常にシミュレーターを起動し、メインアプリケーション内でテストを実行するようです。Appleのドキュメントによると、これは正しくない動作だと思いますが、それが行っているようです。

于 2012-08-16T07:14:00.610 に答える
2

AppCode のフォーラム ディスカッションは次のとおりです: http://devnet.jetbrains.net/message/5466009#5466009

于 2012-08-17T07:33:10.697 に答える