【问题标题】:Use Rhino Mocking to unit test delete functionality使用 Rhino Mocking 对删除功能进行单元测试
【发布时间】:2018-10-24 20:18:49
【问题描述】:

我正在使用 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);           

    }

如何测试是否删除了正确的转载?

【问题讨论】:

    标签: c# unit-testing rhino-mocks


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多