我有折扣服务,如果满足一定条件,就会打电话给我。我需要编写测试用例来检查是否调用了折扣服务。我怀疑的是,是否没有为类型4和5调用折扣服务是一个有效的测试用例场景。
public void ApplyDiscount(int typeId, double amount)
{
if(typeId == 1)
{
//call discount service
}
else if(typeId == 2)
{
//call discount service
}
else if(typeId == 4)
{
//do other stuff
}
else if(typeId == 5)
{
//do some other stuff
}
}发布于 2014-03-01 03:31:30
(我对Java、Junit和莫基托最熟悉--所以我下面写的东西是基于我对这个应用于我能找到的东西的理解而写的)
您正在寻找像莫克这样的模拟工具。
在这个场景中,您要做的是模拟包含DiscountService的对象。
此时,您将执行类似的操作(我无法验证以下代码对于框架是否正确,但其方向是正确的):
public void Test() {
var mockService = new Mock<IDiscountService>();
SomeClass.ApplyDiscount(1, 0.0);
mockService.Verify(
mockService = foo.ApplyDiscount(), Times.Once());
}这将验证在使用给定参数进行ApplyDiscount调用时,是否只调用了一次(而且只有一次)折扣服务。
我要提醒您,您所使用的psuedocoded代码的结构似乎也是可疑的。正在传递的int和看起来想要成为开关语句气味的东西,就像希望成为多态一样。
考虑一下,如果测试很难编写,有时它意味着系统的设计是错误的,应该重新考虑。写得好的代码容易测试。
尽管如此,您还是希望在Moq上阅读并在正确的位置使用它(比如,在不将测试代码放入实际代码的情况下,验证某些东西被调用的次数是否合适--这比开关闻起来更糟糕)。
发布于 2014-01-29 21:38:34
此时没有有效的测试用例。
这里没什么好测试的。该方法返回void,因此任何测试都将集中于对该方法内部的对象或状态的任何影响,或者更改其作用域是全局的。如果情况1和2只是调用一个服务,那么状态没有变化,所以没有什么需要测试的。
案例4和5,不知道你在做什么事情,在这一点上我不会为此编写任何测试。
此外,我可能会使用一个switch语句,而不是一堆if/else。看起来案例1和2是一样的。
发布于 2014-03-01 02:12:30
要发现测试,最简单的方法是将它的思想放在您想要形成测试代码的特性列表中,例如:
也许您不需要测试来显式地检查它是否调用了折扣服务,可能您的应用程序中有更多的服务,而且您也不想检查是否所有这些服务都没有调用。
https://softwareengineering.stackexchange.com/questions/225984
复制相似问题