犀牛非原始对象在期望中
本文关键字:期望中 对象 原始 犀牛 | 更新日期: 2023-09-27 18:34:31
似乎注释无法支持代码
假设我调用了一个方法(例如SaveTicket(并使用构造函数(例如存储库,日志记录(来注入各种模拟接口。如果该方法调用另一个对象并在该方法中创建非基元对象。有没有简单的方法来测试该非原始对象的值?
我想尝试用属性替换该非原始对象并注入是可能的,或者使用 LastCall.Constraint。有没有更好的方法?
这是一个示例 - 在下面的示例中 - 为了验证 Repository.save(t(;
以正确的值 t I 可以调用
-
Do lastcall.constraint
-
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
接口:
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
)
)
);
}
您应该只测试在模拟依赖项(存储库、日志记录(上调用了哪些方法。验证从模拟返回的对象不会给您任何好处(因为您验证了刚刚手动创建的内容并设置为返回结果(。