Ncrunch 모든 테스트 전달 첫 번째 실행이지만 코드 변경 후 실패하고 모든 버튼을 누르면

StackOverflow https://stackoverflow.com//questions/12685690

  •  12-12-2019
  •  | 
  •  

문제

NUNIT 및 NINJECT를 사용하여 VS2012의 새로운 MVC 4 솔루션에서 NCRUNCH를 실행 중입니다.

처음 50시 또는 그래서 테스트를 수행하고 성공적으로 통과 할 때.

코드를 변경 한 후에도 (단지 추가 된 빈 공간조차도) NCrunch는 대부분의 단위 테스트가 실패했습니다. ncrunch 창에서 '모든 테스트 실행'을 누르면 동일한 일이 발생합니다.

그러나 '모든 테스트 실행'버튼을 누르면 모든 50 개의 테스트 패스가 다시 있고 NCrunch 보고서는 모든 것이 좋습니다.

또한 각 테스트를 개별적으로 실행하면 매번 패스합니다.

실패 할 때 내 nINJECT 설정 코드에서 실패한 것 같습니다

오류 : ControlErtEstSetup 에서 TestFixTureSup에 실패했습니다.

public class ControllerTestSetup
{

    [SetUp]
    public void InitIntegrationTest()
    {
        var context = IntegrationTestContext.Instance;
        context.Init();
        context.NinjectKernel.Load<MediGapWebTestModule>();
    }

    [TearDown]
    public void DisposeIntegrationTest()
    {
        IntegrationTestContext.Instance.Dispose();
    }
}

public class IntegrationTestContext : IDisposable
{  

    private static IntegrationTestContext _instance = null;
    private static readonly object _monitor = new object();

    private IntegrationTestContext() { }

    public static IntegrationTestContext Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_monitor)
                {
                    if (_instance == null)
                    {
                        _instance = new IntegrationTestContext();
                    }
                }
            }

            return _instance;
        }
    }
}
.

모든 테스트는 매번 문제없이 Resharper Test Runner에서 실행됩니다.

누구든지 이런 일을 원한다는 것을 알고 있습니까?

나는 인스턴스 속성 내부의 싱글 톤 잠금 코드와 관련이 있지만 확실하지는 않지만 확실하지 않습니다.

======================================================================== 진행 :

Try Catch 문에 래핑하고 출력 창에 오류를 작성하여 위의 NINJECT 설정 방법의 오류로이를 추적 할 수있었습니다.

예외는 두 번 이상 모듈을로드하려고 시도함으로써 발생하였고, 심지어는 확실히하지 않으며 모든 유형의 자동 모듈 로딩을 사용하지 않습니다.

이것은 라인에서 발생합니다.

LocalSessionFactoryModule.SetMappingAssemblies(() => new[] { typeof(ProviderMap).Assembly });

_kernel.Load<LocalSessionFactoryModule>();
_sessionFactory = _kernel.Get<ISessionFactory>();
.

localsessionfactorymodule은 ninjectmodule 클래스에 대해 유래 된 nINJECT 모듈 클래스입니다.

왜이 문제를 해결하기 위해 Ncrunch와 내가 무엇을 할 수 있는가? 모듈이 이미로드 된지 확인하는 방법이 있습니까?

도움이 되었습니까?

해결책

ncrunch는 동일한 프로세스 내에서 테스트 동시성을 실행하지 않으므로 테스트 논리에 멀티 스레드 동작이 없으면 Singleton의 잠금 또는 스레딩으로 인한 문제가 아니라는 것이 안전해야합니다. .

이미 병렬 실행을 사용하지 않도록 설정 했으므로 차이가 없었으므로 문제가 테스트 러너 프로세스 외부의 리소스의 동시 사용 (즉, 디스크의 파일)으로 인해 발생하지 않을 것으로 가정합니다.

이것은 문제가 거의 확실히 테스트가 실행되는 순서와 거의 관련이 있음을 의미합니다. 거의 모든 수동 테스트 러너 (ReShareper 포함)는 시작부터 끝까지 정의 된 순서로 테스트를 실행합니다. 이것은 일관성을 위해 좋지만 테스트가 일관성없는 / 임의 순서로 작동 할 때 표면을 보일 수있는 문제를 가리킬 수 있습니다. NCrunch는 우선 순위 순서대로 테스트를 실행하고 테스트 실행간에 테스트 프로세스를 재사용 할 수 있습니다.이 작업은 테스트의 런타임 동작을 염두에두고 설계하지 않은 경우 다른 것입니다.

표면 (및 디버그)의 유용한 방법은 NCrunch를 사용하여 수동으로 정의 된 순서로 테스트를 실행하는 것입니다. NCrunch 테스트 창에서 테스트를 마우스 오른쪽 단추로 클릭하면 '고급'메뉴에서 기존 작업 러너 프로세스를 사용하여 테스트를 실행하는 옵션을 찾을 수 있습니다. 문제를 표면으로하는 순서를 재현 할 수 있는지 확인하려면 몇 가지 테스트에 대해이 작업을 시도하십시오. 일어날 때 디버거를 테스트에 쉽게 가져 와서 실패한 이유를 알아낼 수 있어야합니다.

대부분의 시퀀스 관련 문제는 명확하지 않은 정적 멤버로 인해 발생하므로 기존 상태가 프로세스 내에서 실행 된 다른 테스트에 의해 뒤에 남겨 둘 수 있다는 가정으로 각 테스트가 가정해야합니다. 또 다른 옵션은 모든 상태가 찢어진 테스트에 의해 완전히 제거되는지 확인하는 것입니다 (내 의견으로는 종종 덜 실용적인 접근 방식).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top