当前位置: 首页 > 知识库问答 >
问题:

为调用同一类方法的方法编写测试

段干河
2023-03-14

我有下面的类,我测试了method1,并模拟了method2和method3。我只测试这样的用例:*如果method2调用是OK,那么==>OK*如果method2抛出NotFoundException,method3返回OK==>OK*如果method2抛出NotFoundException,method3抛出ServiceException==>ServiceException确实抛出了

为了测试method1的功能,模拟方法method2和method3可以吗?我还为method2和method3添加了单独的测试,所以我知道它们完全可以工作。

class ClassUnderTest {

public void method1() {
  try {
    method2();
  } catch (NotFoundException e) {
    method3()
  }
}

public void method2() throws NotFoundException {
  ...
}

public void method3() throws ServiceException {
  ...
}

}

共有1个答案

谢昊乾
2023-03-14

您可以使用Mockitospy执行建议的操作,它允许您对某些方法进行存根处理,但不能对其他方法进行存根处理。然而,这往往不是最好的做法。原因是这样的。

任何一种方法的测试都应该测试该方法的行为--它的输出是什么,它的副作用是什么,以及是否由于输入的变化而有任何特殊的行为。您的测试真的不应该关心方法的实现是什么,只要它有正确的行为。因此,尽管method1调用method2method3,但以这种方式实现它并不是类的要求。因此,与断言method1调用method2的测试不同,您对method1的测试根本不应该提到method2--它只应该检查method1的输出和/或副作用是否是它们应该是的。

这确实意味着在method1的测试和method2的测试之间可能有一些重复的断言,但平衡这一点的是,您的测试对于实现的更改是健壮的。

 类似资料:
  • 我必须为一个调用API然后处理响应的类编写测试。类有两个公共函数和一个私有函数。第一个公共方法获取ID列表。在循环中为每个ID调用第二个公共方法,以获取与ID关联的详细信息。私有方法是在第二个公共方法内部调用的,因为获取基于id的详细信息的调用是异步进行的。 我是JUnits的新手,虽然我知道我不应该测试API调用,只是测试我的函数,但我仍然不明白单元测试应该断言什么。

  • 我在我的服务层有一个方法: [1]这一行获取条形码,比如然后调用另一个类中的一个方法,该方法从数据库中检索有关该项目的信息,执行计算并返回价格。可能的值可以类似于。 [2]按价格对所有值进行升序排序。因此,如果列表包含和和,则将其排序为和。 当我尝试测试此方法时,当调用时,我得到空指针异常。我如何测试这个方法?我试着搜索并找到了一些关于使用mockito的问题和答案,但我不知道如何实现它。 我目前

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 问题内容: 我是python的新手。我试图在类中将值从一种方法传递给另一种方法。我搜索了该问题,但无法获得适当的解决方案。因为在我的代码中,“ if”正在调用类的方法“ on_any_event”,而该方法反过来应该调用我的另一个方法“ dropbox_fn”,该方法利用了“ on_any_event”中的值。如果“dropbox_fn”方法在类之外,它将起作用吗? 我将用代码说明。 这里的主要问

  • 我有一个程序,显示与名称和用户需要输入他们的字段。我怎么测试这个? AssertionError:JSON路径“$.FirstName”处没有值,异常:JSON不能为null或空 我的测试: storetest.java

  • } ---编辑1--更改 根据注释,断言是失败的。