gpt4 book ai didi

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

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

我有我的数据库层:

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

}

目前所有这些方法都是私有(private)方法。

但我希望能够测试它们。

例如

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

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

我想我可以:

  • 只需测试 runQuery 方法是否存在错误的用户名密码等。
  • 保护这些方法。
  • 公开这些方法。

最佳答案

当您调用 this.openSession() 时,我假设您的类(class)正在使用某个协作者连接到数据库模拟该协作者,并让模拟返回密码错误或权限不足所需的响应,以便您可以测试您的类在该场景中的行为。例如

被测类

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

...

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

...

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

测试类

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);
}
}

关于java - 对外部对象不需要的一些方法进行单元测试。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267793/

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