Rac*_*hel 5 java session junit unit-testing
我想对一个类进行单元测试Class A,但它依赖于另一个使用user session方法的类。我要测试的方法不涉及user session. 我可以制作辅助方法Class A来复制Class B我需要的方法的行为吗?
我知道不是很清楚,让我们挖一些代码来清楚地理解....
public void testDetails() throws Exception
{
//Some logic that generates DetailsTOList
saveDetailsHelper(DetailsTOList);
int detailsSize = getDetailsSize();
assertNotNull(detailsSize);
}
Run Code Online (Sandbox Code Playgroud)
现在getDetailsSize()从数据库中获取大小信息。Class B有这个方法,但我不能创建一个对象Class B并测试这个方法,因为Class B从 User 获取会话信息,我可以从 JUnit 类设置会话信息。
我创建saveDetailsHelper了复制方法行为的Class B - saveDetails()方法,并在testDetails()方法中调用它,如上所示。
我的问题:
junit class吗?JUnit 类的功能与 java 中的所有其他类类似;欢迎您使用辅助功能。决定是否运行其他函数的唯一因素是(取决于 junit 的版本)是否有注释指示工具将其作为测试运行。
然而,这个问题正是您应该仔细设计类的原因。如果Class B调用数据库获取信息,这是划分该功能的绝佳机会。您没有澄清“依赖性”(您正在扩展吗?),但如果Class B是 A 类的一个组件,您可以创建一个完整的存根类来代替Class B,并专门返回硬编码(或以其他方式编码)的数据A类测试。只要Class B代理的签名相同,就可以确信A类可以正常工作。
在测试类中创建这些内部类通常很有用,可以防止工作空间中的事情变得过于混乱。
public class testA {
@Test
public void testDetails {
ClassA a = new ClassA();
a.setDependency(new StubClassB());
//run your test
}
private class StubClassB() extends ClassB {
public boolean saveDetails() {
//return fake information;
}
}
}
Run Code Online (Sandbox Code Playgroud)