프레임 워크들이 기능적으로 고려 될 수있는 지점에 가까이 함께 & & 스텁 가까운 모의 객체의 개념을 가져오고 있습니다 조롱의 많은 거의 같다.
- 모의 :하지만 개념적인 관점에서, 나는 보통이 규칙을 따르려고 명시 적으로 테스트중인 객체의 동작을 검증하려고하는 경우에만 (즉, 테스트는이 개체를 호출해야 함을 말하고있다 그 객체).
- 스텁: 일부 기능/동작을 테스트하려고하지만 일부 외부 객체에 의존해야하는 경우 (즉,이 객체가 무언가를해야한다는 테스트가 있습니다. 효과, 그것은 그 개체를 호출 할 수 있습니다)
이것은 각 단위 테스트가 한 가지를 테스트 할 때 분명 해집니다. 물론 한 번의 테스트에서 모든 것을 테스트하려고한다면 모든 것을 기대할 수 있습니다. 그러나 특정 단위 테스트가 검사하는 항목 만 예상하면 코드의 목적이 무엇인지 한눈에 알 수 있으므로 코드가 훨씬 명확 해집니다.
또 다른 이점은 변경으로부터 약간 더 격리된다는 것입니다. & 변경으로 인해 휴식이 발생할 때 더 좋은 오류 메시지가 표시됩니다. 다시 말해, 구현의 일부분을 변경하면 테스트 케이스가 하나만 남을 가능성이 커지고, 노이즈가 발생하는 &을 깨뜨리는 일련의 테스트가 아니라 파손 된 부분이 정확히 표시됩니다.
편집 : 계산기 객체 (의사 코드) 데이터베이스에 대한 모든 추가 사항을 감사 곳은 ... 인위적인 예에 따라 명확하게 수있는 첫 번째 테스트 케이스에 따라서
public void CalculateShouldAddTwoNumbersCorrectly() {
var auditDB = //Get mock object of Audit DB
//Stub out the audit functionality...
var calculator = new Calculator(auditDB);
int result = calculator.Add(1, 2);
//assert that result is 3
}
public void CalculateShouldAuditAddsToTheDatabase() {
var auditDB = //Get mock object of Audit DB
//Expect the audit functionality...
var calculator = new Calculator(auditDB);
int result = calculator.Add(1, 2);
//verify that the audit was performed.
}
우리
Add
메서드 &의 기능을 테스트 할 때 감사 이벤트가 발생하는지 여부는 신경 쓰지 않지만 계산기가 auditDB 참조와 함께 작동하지 않는다는 것을 알고 우연히 최소값을 제공하도록 스텁합니다 특정 테스트 케이스가 작동하도록하는 기능을 제공합니다.두 번째 테스트에서는 특별히
Add
을 수행 할 때 감사 이벤트가 발생하므로 테스트를 수행하지 않기 때문에 감사 이벤트가 발생하므로 여기에 기대치를 사용합니다 (결과가 무엇인지 상관하지 않음).
예, 두 사례를 하나로 결합하여 & 기대를하고 결과가 3이라고 주장 할 수 있지만 한 단위 테스트에서 두 가지 사례를 테스트 중입니다. 이렇게하면 테스트가 더 부서지기 쉽습니다 (테스트를 중단하기 위해 변경 될 수있는 사물의 표면적이 더 커지기 때문에). 그리고 병합 테스트가 실패 할 때 즉시 문제가 무엇인지 알 수 없으므로 추가 기능이 작동하지 않습니다. 또는 감사가 작동하지 않습니까?)
스텁이 지정한 내용을 반환하는 동안 Expect는 Nothing을 반환합니다. 양쪽 모두 '스텁 (stub)'한 번 사용 방법이 좋은 경우에 대해서는 – zinking