单元测试私有字段

Евг*_*цов 0 java tdd junit unit-testing

我有一个简单的类,其中包含一个列表:

public class SomeClass {

    private AppDataSource appDataSource; // it's interface
    private List<Object> someList;

    ////

    public List<Obejct> loadSomeList() {
        if (someList == null) {
            return appDataSource.getListFromDatabase();
        }
        retrunf someList;
    }
}
Run Code Online (Sandbox Code Playgroud)

关键是 - 我希望该列表仅从DB加载一次.我想对这个功能进行单元测试.我是TDD中的noob,我能做的就是 - 为someList编写一个公共getter和setter,并在单元测试中使用它们.但它在概念上是错误的 - 我不希望类的客户端使用此成员变量directlty.

在这种情况下如何正确测试方法?

Gho*_*ica 5

您的单元测试错误.

单元测试是关于测试类的行为 ; 没有实施细节.

您不测试私有字段是否具有此内容或该内容.您测试的唯一方法是方法执行它们应该执行的操作.

这当然意味着您的班级必须有方法插入"特殊列表"进行测试.

简而言之:您想退后一步,并在接下来的2,3个小时内学习如何编写"易于测试代码"; 例如,在CleanCode上观看Google Tech的精彩视频.