对外部对象不需要的一些方法进行单元测试。

Unit testing some methods that aren't required by outside objects.

我有我的数据库层:

public class DataBaseLayer
{
    public Result runQuery(Query q)
    {
        this.openSession(); 
        this.runPackage(q);
        Results r = this.fetchResults();
        this.closeSession();
        return r;
    }

}

目前这些方法都是私有方法。

但我希望能够测试它们。

例如

private void testOpenSession_wrongUserNamePassword_returnsBadUserNamePassWordError();
private void testrunPackage_insufficientPrivileges_returnsInsufficientPrivlegesError();

问题是最好的方法是什么?

我想我可以:

我假设您的 class 正在使用一些合作者连接到数据库,当您调用 this.openSession() 模拟该合作者并让模拟 return 响应密码错误或密码不足时特权,以便您可以在该场景中测试 class 的行为。例如

class 正在测试

public class DataBaseLayer {
    public DataBaseLayer(SomeDBClass dbObject){
        this.dbObject = dbObject;
    }

    ...

    private void openSession() {
        dbObject.connect(username, password);
    }

    ...

    public Result runQuery(Query q){
    ...
}

测试class

public class DataBaseLayerTest {

    @Test(expected = IncorrectPasswordException.class)
    public void testOpenSession_wrongUserNamePassword_returnsBadUserNamePassWordError() {
        SomeDBClass someDBClass = Mockito.mock(SomeDBClass.class)
        Mockito.when(someDBClass.connect(Mockito.anyString(), Mockito.anyString())).throw(new IncorrectPasswordException())

        DataBaseLayer underTest = new DataBaseLayer(someDBClass)

        underTest.runQuery(someQuery);
    }
}