2017-09-07 11 views
0

私は多くのUnitTestを持っています。これらはすべてAnyCPUとして構成されています。私たちはBUILDマシン上でx64として実行したいと考えています。 、それを私がTest -> Test Settings -> Default Processor Architectureに行けば、Visual StudioのオンテストランナーをNUnitに指定して64ビットのテストを実行する方法

[Test] 
public void TestProcess() 
{ 
    Assert.AreEqual(Environment.Is64BitProcess, true); 
} 

C:\nunit-console\nunit3-console.exe path-to-my-solution.sln --config=Debug --agents=1 --process=Separate --result=TestResult.xml;format=nunit2 --timeout=300000 --workers=1 

テスト目的のために、私はこのユニットテストをしました:ビルドマシンは基本的にNUnitのコンソールランナーを実行しジェンキンスサーバですx86を選択すると失敗しますが、x64を選択すると成功します。

テストプロジェクト(ここにいないことを議論の目的でプラットフォームを変更なしnunit3-console.exethrought直接テストを実行するときにちょうど私たちはそれを維持するためにいくつかの理由が認めましょう、同じ動作を持ってする方法はあります「任意のCPU」)。

これはVisual studioでこれを行うには、test.runsettingsを作成するか、私のアプローチを選択することができると説明したhttps://msdn.microsoft.com/en-us/library/ee782531.aspxが見つかりました。

は、私は次の内容で、test.runsettingsファイルを作成しようとしました:私は私の解決策のルートに入れていると私はTest -> Test Settings -> Select Test Settings fileをやった

<?xml version="1.0" encoding="utf-8"?> 
<RunSettings> 
    <!-- Configurations that affect the Test Framework --> 
    <RunConfiguration> 
    <!-- [x86] | x64  
     - You can also change it from menu Test, Test Settings, Default Processor Architecture --> 
    <TargetPlatform>x64</TargetPlatform> 
    </RunConfiguration> 
</RunSettings> 

。 変な部分は、私がコミットしたときにこの操作(このファイルを "テスト設定ファイル"として設定すること)が永続化されないという気持ちがあることです。なぜなら、別のコンピュータで最新の変更を行った後、 。再び

それを設定するしかし、私のunittestのは、まだビルドマシンに障害が発生した任意のアイデアを代替のか、私がここで間違って何をやったか

+0

NUnitコンソールランナーを使用している場合は、アダプタ、テスト設定などの情報はありません。 Visual Studioでテストを実行するだけです。テストの実行方法に関する情報を追加して編集してください。 – Charlie

+0

@Charlie NUnitコンソールは 'runsettings'ファイルを使用していませんか?私は、提供されたコマンドラインでテストを実行し、Visual Studio(とアダプタ)のコンソール(NUnitコンソール)の結果を模倣しようとしています。 – J4N

+0

'.runsettings'ファイルはVS機能であり、nunitコンソールランナーとは関係ありません。 – Charlie

答えて

0

をあなたの基本的な質問から始まっ:。?「NUnitの[コンソールに指定する方法]テストランナーは64ビットでテストを実行しますか?答えはなし

純粋なIL(AnyCpuターゲット)は64ビットp 64ビットOSを使用した64ビットマシンでのロセス何もする必要はありません。コンソールランナーは、AnyCpuコードを32ビットプロセスで実行するために--x86オプションを提供しますが、必要でないため、対応する64ビットオプションは存在しません。

このデフォルト倒すことができますいくつかの方法があります。 1. 32ビットマシン上または32ビットプロセスで実行するためのテストを強制的にOS 2の32ビットバージョンで実行すると、 3 32ビットを対象とするテストの実行

私はあなたが溶液中で指定されたすべてのアセンブリをロードするためにNUnitのを求めている、あなたは.slnファイルを実行すると2と3

の両方を行っている疑いがあります。 --process=Separateオプションを使用したため、これらのアセンブリをすべて同じプロセスでロードすることになります。 でも、非テストアセンブリを含むこれらのアセンブリのうちの1つがであれば、32ビットのプロセスになります。

--process=Separateオプションは、各アセンブリを独自のプロセスで実行するのではなく、メインプロセスとは別の単一プロセスで実行することに注意してください。あなたがドキュメントを読まずにそれを使用しているなら、これはやや直感的ではありません。

私のアドバイスは です。1.コマンドラインで何をしているのか理解していない限り、実際にそれらを必要としない限り、オプションを追加しないでください。 NUnitは、デフォルトを使用するときには、それ自体を理解するように設計されていますが、どんなに狂ったように見えても、あなたが提供するオプションを使用するように設計されています。 * --process:Separate は悪い考えです 2.出発点としてドキュメント

を読む、このコマンドはあなたのために働く必要がありますが...追加のオプションについては

nunit3-console path-to-assembly.dll path-to-another-assembly.dll

...。デフォルトにMultipleを設定します。 * --agents=1は、次の起動前に各プロセスを実行する場合はOKです。 * --workers=1は、一部のテストで[Parallelizable]を使用していて、無効にしようとしている場合にのみ意味があります。

コマンドラインに配置するアセンブリが多すぎるためにソリューションを使用している場合は、,のアセンブリがNUnitでロード可能なものであれば上記が機能する場合があります。デフォルトのプロセス設定で作業している可能性が高くなります。それ以外の場合は、NUnitプロジェクトを使用することをお勧めします。

+0

私は、「32ビット優先」フラグを持つunittestプロジェクトによって参照されるプロジェクトが1つ見つかりました(ただしAnyCPUにはまだ組み込まれています)。 Visual Studioで「Prefered architecture」を64ビットに設定した場合、私の単体テストはnunitテストアダプタでは動作しますが、nunitコンソールでは動作しません。したがって、テストを64ビットで実行するように強制するのが理にかなっている場合があります。 – J4N

+0

あなたはコンソールランナーを使用していることを明確にしたので、私はあなたに変更のリストを提供しました。あなたはそれらを試しましたか?アダプターに問題があった場合、アダプターについての提案がありました。テストは異なる方法で実行される2つの異なるプログラムです。 – Charlie

+0

私はすでに30以上のプロジェクトをテストしており、成長しています。私は手動でそれぞれを指定することはできません。テスト中に独立していなければならないいくつかの「登録」に達している、うまく設計されていないテストがいくつかあるので、別々にすることは必須です。毎回1回だけテストが実行されていることを確認します。とにかく、「32ビット優先」フラグが設定されているときにアダプタではなくコンソールで動作する場合、テストを分割して実行すると何が変更されるのかわかりません。 Prefer 32ビットフラグを削除すると動作しますので、あなたが言及したすべての引数とは関係ありません。 – J4N

関連する問題