14

ゴール

私たちの目標は、継続的インテグレーション環境内で単体テストを実行することです(Jenkins

(すべての質問で、何を達成しようとしているのかを正確に述べることが不可欠だと思います。問題は実際には非常に異なる方法で解決できるかもしれません)

更新:「なぜこれをしたいのですか?」の詳細

まず、特定の自社開発ハードウェアについて話します。そして、継続的インテグレーションテストで、すべての開発者に通知せずにボックスの動作を変更したかどうかを教えてもらいたいと思います(はい、はい、そうです、そのようなことは決して起こりません…)

次に、接続の一部(すべてではない)がデフォルトで無効な証明書を使用しているため、証明書の有効性をチェックするコード(SecTrustEvaluateなど)があります。もちろん、理想的には、私たちのテストはそのコードもテストします。しかし、それは質問するには多すぎるようです。

第三に:まあ、私が本物の取引をすることができるのなら、なぜ私は何かをあざける必要がありますか?IDEには問題はありませんが、なぜコマンドラインが必要なのですか。

そして、予測可能性が必要な場合はYES、すべてのテストに戻ります;)(そして、人々がそうするのを見てました)。いいえ、コードが実際に実際にデバイスで機能するかどうかを知りたいです。それはある種の変な欲望ですか?

これまでに解決された問題

コマンドラインからテストを実行するのはかなり簡単に聞こえますが、

xcodebuild -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO clean test

醜いエラーが発生します:

unsupported build action 'test'

そこで、Webを検索して、コマンドラインからのOCUnitテストの実行に関するこの記事を見つけました。

すべての手順を実行し、次のようにコマンドラインからテストを実行できます。

xcodebuild -scheme CITests -sdk iphonesimulator TEST_AFTER_BUILD=YES ONLY_ACTIVE_ARCH=NO clean build

残りの問題

ただし、「このサーバーの証明書が無効です」ため、SSLサーバーへのNSURLConnectionは失敗します。コマンドラインからテストを実行するときにキーチェーンの問題について聞いたことがありますが、これは本当ですか?SSL接続は拒否されますか?

再現するには

https://github.com/below/SSLTestDemoでサンプルを入手してください。それを開き、Xcode独自のTest⌘Uコマンドを使用してサンプルテストを実行します。テストは成功するはずです。

次に、コマンドラインでテストを実行します。

xcodebuild -scheme CITests -sdk iphonesimulator TEST_AFTER_BUILD=YES ONLY_ACTIVE_ARCH=NO clean build

「このサーバーの証明書が無効です」ため、テストは失敗します。エラー。

ポインタはありますか?

  • 私はそれを間違っていますか?
  • これは本物のバグですか?
  • もしそうなら、workaroungsはありますか?

どんな入力でも大歓迎です!

4

2 に答える 2

2

Jenkins でテストしているときに証明書をチェックしなかっただけです。

このようなチェックを妨げるコードをアプリに含めることは危険であるため (最終的には、出荷前に削除されない可能性があります)、環境変数とコンパイラ フラグの両方を設定して有効にする必要があります…</p>

後記:

Apple はこれをバグと見なしています。rdar://problem/10406441

于 2013-03-15T21:23:26.173 に答える
0

XCode内でもSSL接続の問題が発生しています(XCode 4.5を使用)

私の解決策は、単体テストのセットアップ内で HTTPS 証明書チェックを切り替えることでした。

- (void)setUp
{
    // Set-up code here.
    [super setUp];

    NSURL *URL = [NSURL URLWithString:<#Your SSL Address#>];

    [NSURLRequest.class performSelector:NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:")
                             withObject:NSNull.null  // Just need to pass non-nil here to appear as a BOOL YES, using the NSNull.null singleton is pretty safe
                             withObject:[URL host]];
}

私が行う呼び出しの難解な形式は、これが最新のツールチェーンでのコンパイルを拒否するプライベート メソッドであるためです。これはユニット テスト ターゲットでのみ使用されるため、本番コードには影響しないため、攻撃、間違い、Apple AppStore の承認から保護されます。ymmv。

于 2013-08-21T02:32:59.060 に答える