2017-09-07 10 views
0

많은 UnitTest가 있으며 모두 AnyCPU으로 구성됩니다. BUILD 시스템에서 x64로 실행하고 싶습니다. 그것을 내가 Test -> Test Settings -> Default Processor Architecture에 가면, 비주얼 스튜디오에테스트 러너를 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를 선택하면 성공합니다.

테스트 프로젝트 (안 여기 논의의 목표에 플랫폼을 변경의 WITHOUT nunit3-console.exe축복하는 직접 테스트를 실행할 때 그냥 우리가해야 할 몇 가지 이유가 인정하자, 같은 동작을 할 수있는 방법이 있나요 "Any CPU"로 표시).

Visual Studio에서이 작업을 수행하는 방법을 설명하는 https://msdn.microsoft.com/en-us/library/ee782531.aspx을 찾았습니다. 접근 방법을 선택하거나 test.runsettings을 만들도록 선택할 수 있습니다.

나는 다음과 같은 내용으로하는 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> 

. 이상한 부분은 필자가 커밋 할 때이 파일을 "테스트 설정 파일"로 설정하지 않았기 때문입니다. 왜냐하면 다른 컴퓨터에서 최신 변경 사항을 적용한 후에 수행했기 때문에 . 다시

을 설정할하지만 내 유닛 테스트는 여전히 빌드 시스템에서 실패 어떤 생각을 대안의 또는 내가 잘못 여기에 무슨 짓을했는지

+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 비트를 대상으로하는 테스트 실행

나는 당신이 .sln 파일을 실행하여 모두 2

3.을하고있다 의심, 당신은 솔루션에 지정된 모든 어셈블리를로드 NUnit를 요청하고 있습니다. --process=Separate 옵션을 사용했기 때문에 모든 어셈블리를 동일한 프로세스에서로드해야합니다. 심지어 비 시험 어셈블리를 포함하여 이러한 어셈블리 중 하나 인이 32 비트를 필요로하는 경우 별도의 프로세스는 32 비트 프로세스가됩니다.

--process=Separate 옵션은 자체 프로세스에서 각 어셈블리를 실행하지 않지만 단일 프로세스에서 주 프로세스와 분리되어 실행됩니다. 문서를 읽지 않고 사용하는 경우 약간 직관력이 떨어집니다.

내 충고는 입니다. 1. 명령 줄에서 무엇을하는지 이해하지 못하고 실제로 필요로하는 것을 발견하지 못하면 옵션을 추가하지 마십시오. NUnit은 기본값을 사용할 때 자신을 알아 내고 어떤 옵션이든 상관없이 사용할 수 있도록 설계되었습니다. 2. ...이 명령은 당신을 위해 일한다, 워드 프로세서 시작점으로

읽기

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

추가 옵션에 대해서 ... * --process:Separate 나쁜 생각입니다. 다중을 기본값으로 둡니다. * --agents=1은 다음 프로세스가 시작되기 전에 각 프로세스가 실행되도록하려면 OK입니다. * --workers=1은 일부 테스트에서 [Parallelizable]을 사용하고 사용을 중지하려는 경우에만 의미가 있습니다.

어셈블리가 너무 많아 명령 줄에 배치 할 수 없기 때문에 솔루션을 사용하는 경우 어셈블리가 NUnit을로드 할 수있는 어셈블리 인 경우 위와 같이 작동 할 수 있습니다. 기본 프로세스 설정으로 작업 할 가능성이 큽니다. 그렇지 않으면 NUnit 프로젝트를 사용하는 것이 좋습니다.

+0

"32 비트 선호"플래그 (단, AnyCPU에 내장되어 있음)가있는 unittest 프로젝트에서 참조하는 하나의 프로젝트가 있음을 발견했습니다. Visual Studio에서 "선호 아키텍처"를 64 비트로 설정하면 내 단위 테스트는 nunit 테스트 어댑터로 작동하지만 nunit 콘솔에서는 작동하지 않습니다. 따라서 64 비트로 테스트를 "강제 실행"하는 것이 타당한 경우가 있습니다. – J4N

+0

당신은 콘솔 러너를 사용하고 있음을 분명히 했으므로 변경 사항 목록을 제공했습니다. 너 그거 해봤 니? 어댑터에 문제가있는 경우 어댑터에 대한 제안을했습니다. 테스트는 다르게 실행되는 두 가지 프로그램입니다. – Charlie

+0

나는 이미 30 개가 넘는 테스트 프로젝트를 가지고 있으며 점점 더 커지고 있습니다. 수동으로 지정할 수는 없습니다. 테스트 도중 독립적이어야하는 "등록"에 도달하고있는 저조한 설계의 테스트가 있기 때문에 별도로 작성해야합니다. 우리는 매번 단 하나의 테스트 만 실행되도록하고 싶습니다. 어쨌든, "32 비트 선호"플래그가있을 때 어댑터가 아니라 콘솔에서 작동하는 경우 테스트를 분리하여 실행하면 아무 것도 변경되지 않습니다. Prefer 32 비트 플래그를 제거하면 작동합니다. 따라서 언급 한 모든 인수와 아무런 관련이 없습니다. – J4N