使用Rhino Mocking进行单元测试删除功能

时间:2018-10-24 20:18:49

标签: c# unit-testing rhino-mocks

我正在使用Rhino模拟进行单元测试来测试删除传输的方法,但是我不确定如何测试它。下面是我所拥有的,但是它失败了(Assert.AreEqual失败了,因为结果返回,并且异常对象引用未设置为对象的实例)

    /// <summary>
   /// Test Case: to
   /// </summary>
    [TestMethod]
    public void Should_DeleteTransload()
    {
        //expect
        mockTransloaderRepository.Expect(r => r.GetOneAsync(x => x.Id == ostTransloader5.Id)).IgnoreArguments().Return(Task.FromResult(ostTransloader5));
        mockOstTransloaderService = MockRepository.GenerateMock<OstTransloaderService>(mockTransloaderRepository, mockAuditContext);
        mockTransloaderRepository.Expect(r => r.AddAsync(ostTransloader5)).IgnoreArguments().Return(Task.Run(() => true));
        mockTransloaderRepository.Expect(r => r.AddAsync(ostTransloader4)).IgnoreArguments().Return(Task.Run(() => true));
        List<OstTransloader> ostTransloaders = new List<OstTransloader>() { ostTransloader4 };

        mockTransloaderRepository.Expect(t => t.DeleteAsync(ostTransloader5)).IgnoreArguments().Return(Task.Run(() => true));
        ////act
        var result = mockOstTransloaderService.PurgeTransloadShipmentMaterial(transloadIds);
        //// assert
        Assert.IsNotNull(result);
        Assert.AreEqual(ostTransloaders, result);           

    }

如何测试正确的转载已删除?

1 个答案:

答案 0 :(得分:1)

两个免责声明:(1)多年前,我从Rhino Mocks搬到了Moq,所以这是出于记忆。 (2)我看不到正在测试的代码,因此我不得不假设您正确设置了模拟程序以匹配代码的工作方式。

您需要检查是否对依赖项进行了正确的调用。这是使用Verify完成的。将此添加到您的assert部分。

mockTransloaderRepository.Verify(t => t.DeleteAsync(ostTransloader5));

您可以通过将被测代码更改为调用DeleteAsync(null)来证明这是否是对的事情,这将使测试失败,并且当您将其放回时,测试应该通过。

顺便说一句,在Moq中,我也建议使用一个Times.Once参数,以确保它被精确地调用过一次,并且我假设Rhino Mocks有类似的东西,但是很抱歉,我不知道不知道那是什么。