0

私はこのチュートリアルhttp://blogs.telerik.com/justteam/posts/13-10-25/30-days-of-tdd-day-17-specifying-order-of-execution-in-mocksを実行していますTDDに関して。JustMock ステートメントを Moq に適合させようとしています。

enter code here [Test]
    public void testname()
    {
        var customerId = Guid.NewGuid();
        var customerToReturn = new Customer { Id = customerId};

        //JustCode
        Mock _customerService = Mock.Create<ICustomerService>();
        Mock.Arrange(() => _customerService.GetCustomer(customerId)).Returns(customer).OccursOnce();


        //Moq
        Mock<ICustomerService> _customerService = new Mock <ICustomerService>();
        _customerService.Setup(os => os.GetCustomer(customerId)).Returns(customerToReturn);
        _customerService.VerifyAll();
    }

テストが実行されると、次の例外が発生します。

Moq.MockVerificationException : The following setups were not matched:ICustomerService os => os.GetCustomer(a1a0d25c-e14a-4c68-ade9-bc3d7dd5c2bc)

.VerifyAll() を .Verify() に変更すると、テストはパスしますが、これが正しいかどうかはわかりません。

質問: このコードを適応させる適切な方法は何ですか? .VerifyAll() は .OccursOnce() と似ていませんか?

4

1 に答える 1

2

セットアップで .verifiable が欠落しているようです。また、最後に mock.Verify を使用するだけで、検証可能なものを避けることができます。検証可能な作業ができるように、モックされたインスタンスも呼び出す必要があります。 https://github.com/Moq/moq4/wiki/Quickstart

以下の2つのアプローチを参照してください。

    [Test]
    public void testname()
    {
        var customerId = Guid.NewGuid();
        var customerToReturn = new Customer { Id = customerId};

        //Moq
        var _customerService = new Mock <ICustomerService>();
        _customerService.Setup(os => os.GetCustomer(customerId)).Returns(customerToReturn).Verifiable();

        var cust = _customerService.Object.GetCustomer(customerId);

        _customerService.VerifyAll();
    }


    [Test]
    public void testname1()
    {
        var customerId = Guid.NewGuid();
        var customerToReturn = new Customer { Id = customerId };

        //Moq
        var _customerService = new Mock<ICustomerService>();
        _customerService.Setup(os => os.GetCustomer(customerId)).Returns(customerToReturn);

        var cust = _customerService.Object.GetCustomer(customerId);

        _customerService.Verify(x => x.GetCustomer(customerId));
    }
于 2013-12-18T01:24:23.947 に答える