2016-11-29 6 views
0

나는 Nunit을 사용하고 있으며 이미 생성 된 모든 싱글 톤을 포함하여 실제 초기화 상태로 돌아갈 방법이 있는지 궁금합니다.몇 가지 테스트 실행 사이에 시스템 초기 상태로 돌아 오는 방법

현재 싱글 톤에 리셋 메소드를 추가하는 방법으로 문제를 해결했으며, 이제는 내 프로덕션 코드가 깨끗하지 않기 때문에 그것을 좋아하지 않습니다.

까지 나는 단일 톤이 일단 초기화되고 모든 테스트 실행 중에 사용할 수있는 힙에 보관된다는 것을 이해합니다.

Nunit testfixture의 teardown 기능으로 힙을 정리할 수있는 방법이 있습니까?

나는 다음 (추한) 코드 샘플 문제를 재현하기 위해 관리했습니다

, 당신이 ... 여기

[TestFixture] 
public class SingletonCleanups 
{ 
    private MySingleTonsHolder _holder; 
    [SetUp] 
    public void Setup() 
    { 
     _holder = new MySingleTonsHolder(); 
    } 
    [Test] 
    public void DoWork_FirstExecution_SingleCalledOnce() 
    { 
     _holder.DoWork(); 
     Assert.AreEqual(1, MySingleTonsHolder.MySingleTon.CalledCount); 
    } 
    [Test] 
    public void DoWork_SecondExecution_SingleCalledOnce() 
    { 
     _holder.DoWork(); 
     Assert.AreEqual(1, MySingleTonsHolder.MySingleTon.CalledCount); 
    } 
} 

public class MySingleTonsHolder 
{ 
    public static MySingleTon MySingleTon => MySingleTon.Instance(); 

    public void DoWork() 
    { 
     MySingleTon.Instance().CalledCount++; 
    } 
} 

public class MySingleTon 
{ 
    private static MySingleTon _instance; 
    public static MySingleTon Instance() 
    { 
     if (_instance==null) 
     { 
      _instance = new MySingleTon(); 
     } 
     return _instance; 
    } 
    public int CalledCount { get; set; } 
    private MySingleTon() 
    { 
     CalledCount = 0; 
    } 
} 
+0

에서 anwser하는 것이 가능합니다 이동? – nozzleman

+0

테스트중인 프로그램을 다시 시작하거나 전체 구성 요소를 다시 초기화 할 수 있습니까? 단위 테스트에서 싱글 톤을 사용하여 발생하는 문제에 대한 설명은 http://stackoverflow.com/questions/3876951/why-is-it-hard-to-unit-test-a-system-that에서 확인할 수 있습니다. -depends-on-singletons – JoeFox

답변

-1

것은 모두 테스트가 실행될 때 하나가 다른 후 두 번째 실패했음을 볼 수 있습니다 그 단위 테스트는 당신에게 매우 유용한 것을 보여줍니다 : static 코드의 필드는 사악합니다. now my production code is not clean => 정체 때문에 깨끗하지 못했습니다. singletone을 도입하려면 DI 프레임 워크를 사용하거나 DI 프레임 워크를 사용하지 말고 IoC를 사용하십시오.

자세한 내용은

는, pls는 문제를 재현하는 샘플 테스트 클래스를 제공하기 위해 여기 Dependency Injection & Singleton Design pattern

+0

당신은 올바른 정적 필드이고 싱글 톤은 EVIL입니다. 싱글 톤 객체가 테스트 사이에 유지되기 때문에 DI 프레임 워크가이 문제를 해결하지 못할 것이라고 생각합니다. – silver

+0

@silver 예 , 정적 인 분야에서 뭔가를 지키고 있다면, DI는 당신에게 도움이되지 않을 것입니다. – tym32167

+0

내 질문에 대답하지 않습니다. – silver