首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在if-else条件下,方法调用的有效测试用例是什么?

在if-else条件下,方法调用的有效测试用例是什么?
EN

Software Engineering用户
提问于 2014-01-29 20:17:48
回答 4查看 6K关注 0票数 1

我有折扣服务,如果满足一定条件,就会打电话给我。我需要编写测试用例来检查是否调用了折扣服务。我怀疑的是,是否没有为类型4和5调用折扣服务是一个有效的测试用例场景。

代码语言:javascript
复制
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
}

}
EN

回答 4

Software Engineering用户

发布于 2014-03-01 03:31:30

(我对Java、Junit和莫基托最熟悉--所以我下面写的东西是基于我对这个应用于我能找到的东西的理解而写的)

您正在寻找像莫克这样的模拟工具。

在这个场景中,您要做的是模拟包含DiscountService的对象。

此时,您将执行类似的操作(我无法验证以下代码对于框架是否正确,但其方向是正确的):

代码语言:javascript
复制
public void Test() {
    var mockService = new Mock<IDiscountService>();
    SomeClass.ApplyDiscount(1, 0.0);
    mockService.Verify(
       mockService = foo.ApplyDiscount(), Times.Once());
}

这将验证在使用给定参数进行ApplyDiscount调用时,是否只调用了一次(而且只有一次)折扣服务。

我要提醒您,您所使用的psuedocoded代码的结构似乎也是可疑的。正在传递的int和看起来想要成为开关语句气味的东西,就像希望成为多态一样。

考虑一下,如果测试很难编写,有时它意味着系统的设计是错误的,应该重新考虑。写得好的代码容易测试。

尽管如此,您还是希望在Moq上阅读并在正确的位置使用它(比如,在不将测试代码放入实际代码的情况下,验证某些东西被调用的次数是否合适--这比开关闻起来更糟糕)。

票数 1
EN

Software Engineering用户

发布于 2014-01-29 21:38:34

此时没有有效的测试用例。

这里没什么好测试的。该方法返回void,因此任何测试都将集中于对该方法内部的对象或状态的任何影响,或者更改其作用域是全局的。如果情况1和2只是调用一个服务,那么状态没有变化,所以没有什么需要测试的。

案例4和5,不知道你在做什么事情,在这一点上我不会为此编写任何测试。

此外,我可能会使用一个switch语句,而不是一堆if/else。看起来案例1和2是一样的。

票数 0
EN

Software Engineering用户

发布于 2014-03-01 02:12:30

要发现测试,最简单的方法是将它的思想放在您想要形成测试代码的特性列表中,例如:

  • 当类型为1,2呼叫折扣服务时
  • “当类型是4,做些事情”
  • “当类型是5,做一些其他的事情”

也许您不需要测试来显式地检查它是否调用了折扣服务,可能您的应用程序中有更多的服务,而且您也不想检查是否所有这些服务都没有调用。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/225984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档