:
[Test]
public void Test()
{
// Arrange
ISth sth= MockRepository.GenerateMock<ISth>();
sth
.Stub(x => x.A())
.Return("sth");
// Act
FunctionBeingTested(sth);
// Assert
}
정말 새로운 AAA 구문의 혜택을하려면, 당신은 당신의 마음을 약간 수정해야합니다. 나는 설명하려고 노력한다.
내 제안에 중요한 차이가 있습니다. "기대 확인"이 없습니다. 그래서 나는 반환 값이 있기 때문에 호출을 기대하지 않기로 제안합니다. 나는 그것이 올바른 반환 값을 놓치기 때문에 메서드가 sth.A
을 호출하지 않았을 때 테스트를 통과 할 수 없다고 가정합니다. 다른 주장들 중 적어도 하나는 실패 할 것입니다.
이것은 실제로 좋은 것입니다.
- 스텁을 TestInitialize로 이동할 수 있으므로 테스트에서 스텁 된 메서드가 호출되지 않아도 아프지 않습니다 (예상치 못한 결과입니다). 검사가 더 짧아 질 것입니다.
- 테스트에서는 테스트중인 시스템이 "어떻게"작업을하는지 모릅니다. 결과 만 확인하십시오. 테스트가 더욱 정비 가능해질 것입니다.
당신이 실제로하는 방법은 모의에서 호출 된 경우 확인해야 다른 시나리오가있다. 주로 void를 반환하는 경우. 예를 들어 이벤트가 발생 했어야하고 커밋 된 트랜잭션이 있어야합니다. 이를 위해 AssertWasCalled
을 사용
[Test]
public void Test()
{
// Arrange
ISth sth= MockRepository.GenerateMock<ISth>();
// Act
FunctionBeingTested(sth);
// Assert
sth
.AssertWasCalled(x => x.A());
}
참고 : 값을 반환하지가있다, 그래서 스텁이 없습니다. 이것은 이상적인 경우입니다. 물론 Stub
과 AssertWasCalled
을 모두 가질 수 있습니다.
실제로 이전 구문처럼 행동하는, 또한 Expect
및 VerifyAllExpectations
있습니다. 같은 테스트에서 이Stub
과 AssertWasCalled
이 필요하면 과 두 번 쓰고 싶지 않은 complext argument 제약 조건을 가지고있을 때만 사용합니다. 일반적으로 은 회피합니다. 및 VerifyAllExpectations