문제

모의를 설정하려고 할 때이 오류가 발생합니다. PropertyBehavior():

System.InvalidOperationException : System.InvalidOperationException : 잘못된 호출, 마지막 호출이 사용되었거나 호출이 없어졌습니다 (가상 (C#) / 재정의 가능 (VB) 메소드를 호출하는지 확인하십시오.

나는 만 사용하려고합니다 코뿔소 조롱 3.5 (주선, 행동, 주장)

내 코드는 다음과 같습니다.

    private IAddAddressForm form;

    private AddAddressMediator mediator;

    [TestInitialize()]
    public void MyTestInitialize()
    {
        form = MockRepository.GenerateMock<IAddAddressForm>();
        mediator = new AddAddressMediator(form);


        // Make the properties work like a normal property
        Expect.Call(form.OKButtonEnabled).PropertyBehavior();

        //I tried this too.  I still get the exception
        //SetupResult.For(form.OKButtonEnabled).PropertyBehavior();
    }


    [TestMethod]
    public void TestOKButtonEnabled()
    {

        form.OKButtonEnabled = true;
        Assert.IsTrue(form.OKButtonEnabled);
    }

나는 스터브를 사용할 수 있다는 것을 알고 있습니다 (그리고 위의 코드는 내가해야합니다). 그러나 나는 코뿔소 모의를 배우려고 노력하고 있습니다.

결국 나는 여러 속성에 해당 값이 액세스되도록 할 수 있기를 원합니다. (확인 방법에 대한 힌트 form.FirstName 접근 (즉, 게터가 부름)도 감사 할 것입니다.)

필요한 경우 여기에 코드가 있습니다. IAddressForm:

namespace AddressBook
{
    public interface IAddAddressForm
    {
        string FirstName { get; set; }
        string LastName { get; set; }
        string Address1 { get; set; }
        string State { get; set; }
        string Address2 { get; set; }
        string ZipCode { get; set; }
        string City { get; set; }
        bool OKButtonEnabled { get; set; }
    }
}

어쨌든, 나는 인터페이스를 통과 할 때 가상이 문제가되지 않을 것이라고 생각했지만 분명히 무언가를 놓치고 있습니다.

도움이 되었습니까?

해결책

사용하지 않았습니다 PropertyBehavior 전에는하지만 이것이 당신이 찾고있는 구문입니까?

form.Stub(x=>x.OKButtonEnabled).PropertyBehavior()

Rhino Mocks는 이제 확장 방법을 통해 완전히 작동합니다. 내가 더 이상 만드는 유일한 정적 호출은 MockRepository.GenerateStub.

다른 팁

당신은 모의 대신 스터브를 사용하는 것을 언급했지만 변경하기 전에 이상하게도 GenerateStub을 사용할 때 유효하지 않은 호출 예외를 얻을 수 있습니다.

View = MockRepository.GenerateStub<IAddressView>();
View.Stub(v => v.Message).PropertyBehavior();

이것은 잘못된 호출 예외를 던지고 예, iaddressview.message에는 getter and setter가 있습니다.

비가적인 방법에 대한 기대를 설정하려고 할 때이 오류를 받았습니다.

mockedObject.Expect(a => a.NonVirtualMethod()).Returns(null);

비 제한 메드 가상을 만들었을 때 오류가 사라졌습니다.

나는 당신이 모든 기대치를 설정 하고이 모의 사용을 시작하기 전에 mockrepository.replyall ()을해야한다고 생각합니다. 따라서 귀하의 경우에 제 생각에는 Mediator 이전의 expect.call 라인을 이동해야한다는 것입니다.

[TestInitialize()]
public void MyTestInitialize()
{
    form = MockRepository.GenerateMock<IAddAddressForm>();
    // Make the properties work like a normal property
    Expect.Call(form.OKButtonEnabled).PropertyBehavior();

    //I tried this too.  I still get the exception
    //SetupResult.For(form.OKButtonEnabled).PropertyBehavior();

    MockRepository.ReplyAll();
    mediator = new AddAddressMediator(form);



}

나는 전화하려고했을 때이 문제를 해결했다. internal C#의 객체의 속성 (getter 만 해당). 이 경우 추가 .PropertyBehavior() 도움이되지 않았습니다.

내 해결책은 속성과 내부 방법으로 논리를 추출 하여이 방법에 종속성을 주입하는 것이 었습니다 (매개 변수).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top