C# NUnit-测试是否调用了方法
如何测试以下代码C# NUnit-测试是否调用了方法,c#,nunit,C#,Nunit,如何测试以下代码 public void CreateRentalIfNecessary(int? rentalId) { if (rentalId.HasValue) { CreateRental(rentalId.Value); } } 我需要编写一个简单的单元测试来验证当rentalId不是null时是否调用了createrent。我如何测试这个 然后这里的答案似乎太复杂了:从表面上看,您试图同时测试同一对象的两种方法,CreateRental和CreateRental。因为它们都在
public void CreateRentalIfNecessary(int? rentalId)
{
if (rentalId.HasValue) { CreateRental(rentalId.Value); }
}
我需要编写一个简单的单元测试来验证当rentalId
不是null
时是否调用了createrent
。我如何测试这个
然后这里的答案似乎太复杂了:从表面上看,您试图同时测试同一对象的两种方法,
CreateRental
和CreateRental
。因为它们都在同一个对象中,所以不能使用模拟。这让我得出了几个不同的结论
CreateRental
中检查是否需要。当然,这是否可能取决于调用方法的方式CreateRental
。在这种情况下,您应该能够为CreateRentalIfNeeded
重用相同的测试用例我更喜欢(1)这样的东西。您的测试可能会告诉您重构SUT。通常,您会通过检查
createRent
是否执行了它应该执行的操作来测试该方法是否被调用,例如,向数据库或模拟数据库添加新的租用。单元测试很困难。我得说你提到的那篇文章很贴切。单凭nUnit是无法做到这一点的。您需要使用某种模拟框架,并在编写代码时考虑测试,即遵循坚实的原则。如果CreateRent引用通过依赖项注入插入的某个对象,则可以使用Moq实例化该对象,并使用Moq的Verify方法验证该方法是否被调用。或者使用Unity拦截来实现方法进入/退出跟踪,并以这种方式断言它。或者通过读取日志文件实现方法进入/退出日志记录和验证。希望这有帮助。@MitchStewart Create rental与测试中的方法在同一服务类中。我们正在使用Moq,所以我可以使用。如果希望我们能够帮助您,您需要显示CreateRental()
的代码。我在API控制器方法中有if语句。我们的架构师让我测试整个控制器,看看是否调用了CreateRental
——这对我来说似乎很愚蠢,所以我尝试将其转移到单独的方法中进行测试。现在我陷入了两难境地。不管怎么说,所有的选择都是免费的!