gpt4 book ai didi

java - 使用 JUnit 测试构造函数(或 setter)的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 01:49:49 25 4
gpt4 key购买 nike

我有两种解决方案来测试我的构造函数(或 setter )。

第一个是使用getters

public void Test() {
Person p = new Person("toto"); // name
assertEquals("toto", p.getName());
}

第二种是使用Field

public void Test() {
Person p = new Person("toto"); // name
final Field fieldName = p.getClass().getDeclaredField("name");
fieldName.setAccessible(true);
assertEquals("toto", fieldName.get(p));
}

您的建议是什么?为什么?谢谢。

最佳答案

IMO,应尽可能避免反射。当然,在某些情况下是需要的,但在大多数情况下,不值得在性能和安全性上做出巨大的权衡。

其次,可以说更重要的是,如果测试一段代码的唯一方法是使用反射,那么您可能不需要测试它。

考虑以下示例:

public class Message {
private String message;

public Message(Message message) {
this.message = message;
}

// NO GETTERS/SETTERS
}

如果我想测试此构造函数是否“有效”,我可以编写一个测试,使用反射来查看对象内部并检查消息是否与构造函数参数匹配。但这有什么好处呢?

据推测,我希望该消息类由另一段代码以某种方式使用。该代码如何工作?我会发现我可能需要一个 getMessage() 方法或等效的方法来对对象执行任何有用的操作。

一般来说,在单元测试中使用反射是不好的,因为它测试底层实现,而不是行为。当有人出现时,您的单元测试不应该中断,例如,重构代码以将数据存储在远程服务器上。

此外,我会避免使用这样的“琐碎”测试来进行困惑的测试。专注于测试您的业务逻辑。相信 JVM 基本上会像宣传的那样工作。

关于java - 使用 JUnit 测试构造函数(或 setter)的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59946517/

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