【发布时间】:2017-05-23 13:05:16
【问题描述】:
我正在寻找一种方法来测试处理数据的类中的数据,然后以尽可能干净和可移植的方式上传数据。所以我不想诉诸于公开获取功能,以避免任何能够访问这些数据的东西。为了保持它的可移植性,我想避免使用测试数据库,以便可以在任何情况下运行这些测试。
Class Foo {
private int a;
private int b;
private int c;
private DBSaver dbSaver;
public Foo(DBSaver dbSaver) {
this.dbSaver = dbSaver;
}
public void processData() {
processData();
saveToDB();
}
private void workNumbers() {
a = 1;
b = 2;
c = a + b;
}
private void saveToDB() {
List<Integer> list = new ArrayList<>();
list.add(a); list.add(b); list.add(c);
dbSaver.save(list);
}
}
测试类:
class FooTest {
@Mock
DBSaver dbSaver;
@Mock
Foo foo;
@Test
private void test() {when(dbSaver.save(any(ArrayList<>.class))).then(returnsFirstArg());
foo = new Foo(dbSaver);
Mockito.doThrow(new Exception() {
//Now I would like to get a, b and c so I can ensure that they have the proper values.
}
).when(foo).processData();
}
}
Here 是代码的 pastebin 版本]()。
workNumbers() 将正常执行,并且由于 save() 函数已被模拟为什么都不做,因此该代码不会做任何太严重的事情。
我想问一下现在是否有一种方法可以通过模拟抛出的异常来以列表形式获取 a、b 和 c 值。问题是通过 FooTest 中的模拟实例访问 Foo 中的私有值。
【问题讨论】: