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

Use Rhino Mocking to unit test delete functionality

我正在使用 Rhino 模拟进行单元测试以测试删除 transport.However 我不确定如何测试它的方法。下面是我所拥有的,但它失败了(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) 我多年前从 Rhino Mocks 转移到 Moq,所以这是凭记忆。 (2) 我看不到您正在测试的代码,所以我不得不假设您正确设置了模拟以匹配代码的工作方式。

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

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

您可以通过将被测代码更改为调用 DeleteAsync(null) 来证明这是否正在检查正确的东西,这应该会使测试失败,当您放回去时,测试应该会通过。

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