객체에 대한 이전 기대치를 지우는 방법은 무엇입니까?
반환 값을 설정하고 싶습니다
_stubRepository.Stub(Contains(null)).IgnoreArguments().Return(true);
그러나 특정 테스트에서 false를 반환하도록 해당 기대를 재정의하십시오.
다음과 같은 것 :
_stubRepository.ClearExpectations(); //<- this does not exist, I'm just making something up
_stubRepository.Stub(Contains(null)).IgnoreArguments().Return(false);
두 번째 호출에서 기대 값이 false를 반환하는 것을 원하지 않으며 첫 번째 기대 값을 무시하고 싶습니다.
이것은 내 테스트 시나리오를 크게 단순화하는 데 도움이됩니다.
세 가지 방법이 있습니다.
BackToRecord를 사용하여 기대치를 재설정 할 수 있습니다.
어색하기 때문에 실제로 사용한 적이 없다는 것을 인정해야합니다.
// clear expectations, an enum defines which
_stubRepository.BackToRecord(BackToRecordOptions.All);
// go to replay again.
_stubRepository.Replay();
편집 : 지금은 가끔 사용하지만 실제로 가장 깨끗한 방법입니다. 그것을 수행하는 확장 방법 (Stub과 같은)이 있어야합니다-방금 잊혀진 것 같습니다. 직접 작성하는 것이 좋습니다.
Repeat.Any ()를 사용할 수 있습니다.
스텁 정의의 순서를 '파괴'하고 이전 정의를 "무시"합니다. 그러나 그것은 어떻게 든 암묵적입니다. 쓰기 쉽기 때문에 가끔 사용합니다.
_stubRepository.Stub(x => x.Contains(null))
.IgnoreArguments()
.Return(false)
.Repeat.Any();
새 모의를 만들 수 있습니다.
사소하지만 명확하고 이해하기 쉽습니다. 많은 정의를 유지하고 하나의 호출 만 변경하려는 경우에만 문제가됩니다.
_stubRepository = MockRepository.GenerateMock<IRepository>();
_stubRepository.Stub(x => x.Contains(null))
.IgnoreArguments()
.Return(false);
이러한 상황에서 저는 스텁의 의도를 더 잘 보여주고 가독성을 높이기 위해 간단한 RinoMocks 확장 방법을 만들었습니다.
public static void OverridePrevious<T>(this IMethodOptions<T> options)
{
options.Repeat.Any();
}
따라서 주석이 필요할 수있는 다음과 같은 암호 호출 대신 :
[SetUp]
public void Setup()
{
carStub.Stub(x => x.Model).Return("Model1");
carStub.Stub(x => x.Model).Return("Model2");
}
[Test]
public void SomeTest()
{
//Arrange
//overrides previous stubs that were setup for the Model property
carStub.Stub(x => x.Model).Return(null).Repeat.Any();
//Act
//Assert
}
.Repeat.Any () 호출의 의도를 더 잘 보여주는 더 읽기 쉬운 테스트를 얻을 수 있습니다.
carStub.Stub(x => x.Model).Return(null).OverridePrevious();
커뮤니티를 위해 위의 Stefan의 옵션 목록에 추가 할 것입니다.
반환 값을 자주 변경해야하는 경우 다음과 같이 클로저를 사용하는 것이 깨끗하고 효율적입니다.
bool returnValue = true;
_stubRepository.Stub(x => x.Contains(null)).IgnoreArguments().Do(new Func<bool>(() => {
return returnValue;
}));
returnValue = false;
// Calls to Contains now return false;
returnValue = true;
// Calls to Contains now return true;
The lambda expression will be executed every time Contains
is called and because we created a closure referencing returnValue
, it will always look up the current value of returnValue
.
참고URL : https://stackoverflow.com/questions/770013/how-to-clear-previous-expectations-on-an-object
'IT TIP' 카테고리의 다른 글
Guava checkNotNull의 요점은 무엇입니까 (0) | 2020.11.27 |
---|---|
탭 너비 지정? (0) | 2020.11.27 |
JSP에서 함수 선언? (0) | 2020.11.27 |
PHP에서 PDO로 열린 SQL 연결을 닫아야합니까? (0) | 2020.11.27 |
C #에서 출력을 위해 double 형식 지정 (0) | 2020.11.27 |