2013-02-05 2 views
0

우리가 코드 아래에 있다고 상상메서드 내에서 코드를 실행하지 않고 메서드가 호출되었다는 것을 어떻게 알릴 수 있습니까?

public class test 
    { 
    public void Condition(x,y) 
    { 
     if (x == y) 
     { 
      methodOne(); 
     } 
     else 
     { 
      methodTwo(); 
     } 
    } 
    public void methodOne(){//do some database stuff} 
    public void methodTwo(){//do some database stuff} 
} 
내가 주장하고 싶은

그 methodone가 호출되는 경우 X 축 == Y 또는 만 할 것 같은 내 테스트 내 방법의 하나 내부의 코드를 실행하지 않으려하지 일부 데이터베이스 물건 ...

나는,이

MockRepository mockRepository=new MockRepository(); 
var Mock = mockRepository.PartialMock<test>(); 
mock.Replay(); 
mock.condition(1,1); 
mock.AssertWasCalled(x=>x.methodOne); 
mock.VerifyAllExpectations(); 

같은 것을 쓰고 있지만, 그것은뿐만 아니라 방법의 하나의 물건을 실행 실행하려고 나는 내 테스트는 데이터베이스 연결을 원하지 않는다 내 조건이 w인지 확인해야 해. ork 그리고 그것은 불렀다.

+1

의존성 주입을 사용하고 있습니까? –

+0

아니, 내가해야한다고 생각해! ta – wikinevis

답변

2

하나의 클래스에서 우려 사항, 비즈니스 논리 및 데이터 액세스를 혼합합니다. Single Responsibility PrincipleSeparation of concerns에 대해 생각해 봐야합니다.

귀하의 public void Condition(x,y) 아마 methodOne()methodTwo()데이터 액세스 레이어에있는와 비즈니스 로직 계층에 있어야합니다.

비즈니스 액세스 계층을 조롱 할 수 있도록 데이터 액세스 계층을 비즈니스 로직 계층에 삽입해야합니다 (IoC). 그런 식으로 조건 메서드를 테스트 할 때 실제로 데이터베이스에 연결하지 않는 모의 데이터 액세스 계층을 전달하게됩니다.

그런 식으로 데이터베이스에 쓰는 것과 같은 부작용없이 현재 상태를 호출 할 수 있는지 확인할 수 있습니다. 이와 같은 상황이 발생하면 코드를 더 나은 아키텍처로 분해하여 궁극적으로 Test Driven Development을 조사 할 수 있습니다.

+0

나는 당신의 뜻을보고 당신의 해결책에 동의합니다. 이것의 옆에 나는 단지 부분적인 모의와 함께 그것을 실행하지 않고 호출 된 내부 메쏘드만을 주장할만한 것이 있는지 알고 싶다. – wikinevis