gpt4 book ai didi

c# - 期望中的 Rhinomock 非原始对象

转载 作者:行者123 更新时间:2023-11-30 22:28:47 26 4
gpt4 key购买 nike

好像注释不能支持代码

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

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

这是一个例子——在下面的例子中——为了验证 Repository.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);
}

最佳答案

让我们举个例子。假设您有以下类并且想要对 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 接口(interface):

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
)
)
);
}

关于c# - 期望中的 Rhinomock 非原始对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10614229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com