【问题标题】:Rhinomock non-primitive object in expectations期望中的 Rhinomock 非原始对象
【发布时间】:2012-05-16 07:54:56
【问题描述】:

cmets 好像不支持代码

假设我调用了一个方法(例如 SaveTicket)并使用构造函数(例如 Repository、Logging)来注入各种模拟接口。如果该方法调用另一个对象并在该方法内创建一个非原始对象。是否有任何简单的方法来测试该非原始对象的值?

我想尝试用属性替换非原始对象并注入是可能的,或者使用 LastCall.Constraints。有没有更好的办法?

这是一个示例 - 在下面的示例中 - 为了验证 存储库.save(t);

用正确的 t 值调用我可以

  1. 执行 lastcall.constraints

  2. lastcall.ignorearguments

有没有更好的办法?

CreateMyTicket(int ticketnumber, string name)
{
   ticketobject t = new ticketObject(ticketnumber, name);
   t.upgrade = ticketnumber+2;
   Repository.save(t);
}

【问题讨论】:

  • 你能显示一些代码吗?涉及的类和接口。
  • 你失去了我。您测试的方法是哪种方法?这个“其他对象”从何而来?它是由被测单元还是由模拟创建的?

标签: c# unit-testing mocking rhino-mocks


【解决方案1】:

让我们举个例子。假设您有以下类,并且要对 CreateMyTicket 方法进行单元测试:

public class ClassToTest
{
    public IRepository Repository { get; private set; }

    public ClassToTest(IRepository repository)
    {
        Repository = repository;
    }

    public void CreateMyTicket(int ticketnumber, string name)
    {
        var t = new TicketObject(ticketnumber, name);
        t.Upgrade = ticketnumber + 2;
        Repository.Save(t);
    }
}

这假设我们有一个IRepository 接口:

public interface IRepository
{
    void Save(TicketObject t);
}

下面是示例单元测试的样子:

[TestMethod]
public void CreateMyTicketTest() 
{
    // arrange
    var repositoryStub = MockRepository.GenerateStub<IRepository>();
    var sut = new ClassToTest(repositoryStub);
    var ticketNumber = 5;
    var name = "John";

    // act
    sut.CreateMyTicket(ticketNumber, name);

    // assert
    repositoryStub.AssertWasCalled(
        x => x.Save(
            Arg<TicketObject>.Matches(t => 
                t.Upgrade == 7 && 
                t.Name == name && 
                t.TicketNumber == ticketNumber
            )
        )
    );
}

【讨论】:

  • 是的,这就回答了。谢谢!
【解决方案2】:

您应该只测试在模拟依赖项(存储库、日志记录)上调用了哪些方法。验证从模拟返回的对象不会给您任何东西(因为您验证了刚刚手动创建的内容并设置为返回结果)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2019-12-23
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多