gpt4 book ai didi

java - 如何通过传递空参数来覆盖避免空参数的void方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:04 27 4
gpt4 key购买 nike

我有这样的方法:

public class SomeService {
public void sortByFieldX(List<MyClass> list) {
if (list != null) {
Collections.sort(list, new ComparatorOfMyClassThatUsesFieldX());
}
}
}

我应该如何为传递 null 参数的 sortByFieldX 编写测试?

public class SomeServiceTest {
@Test
public void sortByFieldX() {
List<MyClass> list = null;
SomeService service = new SomeService();
service.sortByFieldX(list);
//assert what?
//assertNull(list); is really stupid because Java is pass by value
}
}

这个测试是否有效?我只是想将这个测试作为一组测试的一部分来编写,以覆盖代码中的所有分支。

最佳答案

如果您传递一个 null 参数,该方法什么都不做 - 它不修改任何参数(因为它是一个 null),它不返回任何东西(因为它是一个 void 方法),它不会更新任何数据成员或抛出任何异常。

恕我直言,测试这种情况有点毫无意义,但如果你想安全起见,这里唯一要测试的是 null 输入不会产生异常(特别是 NullPointerException)。您提供的测试确实实现了这个目标。正如您在行内指出的那样,断言 null 实际上是 null 是毫无意义的。

编辑:
根据 Brois the Spider 在评论中的建议,可以使用 ExpectedException 使此行为更加明确。规则:

public class SomeServiceTest {
@Rule
public ExpectedException thrown= ExpectedException.none();

/** Just makes sure no exception is thrown */
@Test
public void sortByFieldX() {
List<MyClass> list = null;
SomeService service = new SomeService();
service.sortByFieldX(list);
}
}

关于java - 如何通过传递空参数来覆盖避免空参数的void方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com