문제

Rhino Mocks를 사용하여 조롱 한 인터페이스에 속성이 있습니다. 내 단위 테스트에서 액세스했는지 알고 싶습니다.

Rhino Mocks를 통해 부동산에 액세스되었는지 확인하는 방법이 있습니까?

이 코드를 찾았습니다 여기 그러나 작동하지 않는 것 같습니다.

string name = customerMock.Name;
customerMock.AssertWasCalled(x => {var ignored = x.Name;});

이 코드를 재현했고 다음을 얻습니다.

Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0..

이 구문을 사용하고 싶지만 무언가를 놓치고 있어야합니다. 나는 스터브로 그것을 부르고있다 (모의가 아님)은 차이를 만들어냅니다.

도움이 되었습니까?

해결책 2

내가 사용하고 있던 구문이 작동합니다. 그러나 속성이 속성 모드가 아닌 경우에만 작동합니다. (이것은 스터브의 기본이며 모의 경우 켜질 수 있습니다).

PropertyBehavior 모드가 켜지면 구문이 작동하지 않습니다. 에 따르면 Ayende 그 시점에서 값을 확인해야합니다.

다른 팁

Rhino Mocks를 통해 부동산에 액세스되었는지 확인하는 방법이 있습니까?

예. 재산에 대한 기대를 설정할 수 있습니다. 확인이 던지지 않으면 속성에 액세스되었음을 알 수 있습니다.

var mocks = new MockRepository();
IFoo foo = mocks.DynamicMock<IFoo>;
// this sets up an expectation that Name is accessed, and what it should return
Expect.Call(foo.Name).Return("John Doe"); 
mocks.ReplayAll()

// test something that uses IFoo here ...

mocks.VerifyAll();  // Throws if foo.Name was not accessed after ReplayAll()

이것은 당신이 원하는 것으로 가정합니다 foo.Name 액세스 할 수 있습니다. 당신의 목표가 그것을 확인하는 것이라면 ~ 아니다 액세스하면 DynamicMock 대신 strictmock 만 사용해야합니다. 엄격한 모의는 예상치 못한 전화를 걸어 버릴 것입니다.

메소드가 호출되거나 가짜 물체에 액세스 된 속성이 액세스되었다고 주장하려면 항상 모의를 사용해야합니다. 스터브는 상호 작용을 테스트하고 싶지 않은 상황에 대한 것이지만 일부 객체를 호출하는 것이 특정 값을 반환하여 논리 흐름을 만들 수 있도록하고자합니다.

나는 strictmock이 당신이 찾고있는 것이라고 믿는다. 그것에 대한 정보가 있습니다 여기. 테스트를 너무 부드럽게 만들 수 있기 때문에 사용하는 것이 낙관적이라고합니다. 그러나하려는 일을 달성하는 데 도움이 될 것입니다.

The를 사용하여 통화 스택을 확인할 수 있습니다 StackFrame 수업. 그다지 깨끗하지는 않지만 원하는 결과를 제공해야합니다 ...

나는 보통 사용합니다 모크 Castle을 사용하므로 Rhino Mocks와 함께/대신 고려할 수 있습니다. 이것이 당신이 거기에서 할 수있는 방법입니다.

// expects an invocation to set the value to "foo"
mock.SetupSet(foo => foo.Name = "foo");

// or verify the setter directly
mock.VerifySet(foo => foo.Name = "foo");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top