【发布时间】:2016-09-08 13:30:40
【问题描述】:
我见过this,但它并没有很好的答案。有时您需要测试一个类的某些行为,但要真正断言您具有预期的行为,您需要检查它的一些私有数据。
一个例子:我正在创建一个类,它将返回从文件中读取的随机单词。所以我设计了一个这样的类:
public class WordsDatabase {
private List<String> wordsList = new ArrayList<String>();
public WordsDatabase() {
fillWordsListFromFile();
}
private void fillWordsListFromFile() {...}
public String getRandomWord() {...}
}
我不想公开 wordsList,但现在我应该如何单元测试 getRandomWord() 是否真的从我的字典文本文件中获取了一个随机单词?
我只能测试它是否返回一个单词,但我不知道该单词是否是从文件中随机挑选出来的。
为了测试我是否可以对均匀分布执行卡方检验,但我必须至少知道 wordsList.size(),以某种方式公开它。
也许我只是愿意进行太深的测试......
编辑:
感谢您的回答,得到了提示。当我的课程难以测试时,可能是因为它的设计有问题。
【问题讨论】:
-
这属于programmers.stackexchange.com - 一个用于编程理论/最佳实践的 stackexchange 站点。
Stack Overflow(此站点)用于特定的编程/代码问题。您的问题是关于单元测试理论/最佳实践/方法。 -
@mmcrae:这不是题外话。
-
那里已经提出并回答了一个密切相关的问题:programmers.stackexchange.com/q/199090/25768
-
不要在两个网站上发帖。选择一个。
-
a) 事情不需要完全
public: stackoverflow.com/a/6913490/995891 b) 你的测试可以测试一个小的测试列表,例如10 件事,调用常规方法 1000 次,检查你得到的每一件事是否大致均匀。这目前不起作用,因为您的类无法正确建模它的依赖关系并对其进行硬编码(也就是使列表可配置)
标签: java unit-testing junit