我是java和单元测试的新手。我在为其中一种测试方法编写单元测试时遇到了问题。能帮帮我吧。
ClassA的:
Class classA{
/*......*/
classB method1_ClassA(parameters){
/*.....
.....
.....
.....
.....*/
String some_Identifier = method2_ClassA(parameters)
}
private String method2_ClassA(parameters){
/*contains call to the database*/
}
}
ClassB的:
Class classB{
/*.....*/
}
ClassC:
Class classC{
/*.......*/
public classB method1_ClassC(parameters){
classA obj_ClassA = new classA();
return obj_ClassA.method1_classA(parameters);
}
/*.......*/
}
我正在尝试对classC进行单元测试。 ClassC中的一个方法调用类A的方法。我试图模拟这个方法,即method1_classA。但是这个方法调用另一个存在于同一个类中的方法。有人可以帮我解决如何为classC创建单元测试。
答案 0 :(得分:0)
我想我现在正在解决你的问题。问题是你创建了不可测试的代码。它很简单:
class C {
public B foo(parameters){
A someA new A();
return someA.someMethod(parameters);
(请注意:我重写了你的例子,使用的名称对于java程序员来说并不那么令人困惑。例如,你没有将“class”放入类的名称中)
您的代码存在的问题是调用 new 。简单地说,该调用几乎不可能对该方法进行合理的单元测试。这里唯一合理的答案是:重做你的生产代码,并引入依赖注入,比如
class C {
private A someA;
public C() { this(new A()); }
C(A someA) { this.someA = someA; }
public B foo(parameters){
return someA.someMethod(parameters);
你在那里看到:有一个“内部”构造函数可用于提供A对象。你使用这个构造函数给一个模拟的A到C;而且突然之间,你可以测试整个事情。
所以,长话短说:
a)我真的建议更改这段代码;因为设计糟糕,现在根本无法测试
b)如果你真的不能那样做;你可能想看看Powermock能否在这里帮助你......但要注意:这不是初学者的工具。它在很多层面都是强大而危险的。无论如何,请注意this ...