Java JUnit不识别抽象类的具体实现中定义的@testcases
这是我在JUnit中面临的一个奇怪的情况 给定:Java JUnit不识别抽象类的具体实现中定义的@testcases,java,unit-testing,junit,abstract-class,Java,Unit Testing,Junit,Abstract Class,这是我在JUnit中面临的一个奇怪的情况 给定: 我需要创建单元测试来测试抽象类中定义的方法 为此,我创建了一个ConcreteAbstractClassImpl,它扩展了AbstractClass,并为其中的抽象方法提供了虚拟响应 为了定义测试,我创建了一个测试类ConcreteAbstractClassImplTest。AbstractClass的所有非抽象方法都在这个类中使用@Test进行单元测试 下面提供的代码示例: import static org.junit.Assert.*;
import static org.junit.Assert.*;
@RunWith(PowerMockRunner.class)
public class AbstractClassTest {
@Mock
private DependencyClass dependencyClassObj;
@InjectMocks
private ConcreteAbstractClassImpl concreteAbstractClassImpl ;
@Before
public void setUP() {
.........
}
@Test
public void test_non_abstract_method_AbstractClassImpl () {
String response = concreteAbstractClassImpl.method_non_abstract();
assertEquals(response, "method_non_abstract");
}
}
class ConcreteAbstractClassImpl extends AbstractClass {
private DependencyClass dependencyClassObj;
public abstract String method_abstract(){
return "dummy_response";
}
}
class AbstractClass {
@Autowired
private DependencyClass dependencyClassObj;
public abstract String method_abstract();
public String method_non_abstract(){
return "method_non_abstract";
}
}
问题:
测试类运行良好,通过runas>junittest在Eclipse中单独运行时可以识别每个测试用例。但是,当我在pom.xml上使用Run As>Maven build构建整个项目,并且取消选中跳过测试时,JUnit会忽略ConcreteAbstractClassImplTest中提到的所有测试。JUnit可以正确识别不遵循上述模式的常规测试类。我不知道这是JUnit中的一个bug还是什么,但是如果有人对此有一个解决方法/修复程序,这将非常有帮助
由于跳过了测试类,此问题也影响了我的声纳覆盖率。为什么要模拟要测试的类?不,我没有。我需要测试的类是AbstractClass,它的具体实现是ConcreteAbstractClassImpl-->我为其创建了ConcreteAbstractClassImplTest,我在其中模拟“DependencyClass对象”,并使用InjectMock将其注入ConcreteAbstractClassImpl。我知道,这太令人困惑了根据此线程,您使用了错误的运行程序()。如果您的意思是,我应该使用MockitoJUnitRunner而不是PowerMockRunner,请注意,我尝试了,但没有成功:(这不是我要问的。你有使用这些的测试类吗?还有:你为什么要测试抽象类?它们永远不会在自己的私有范围内“工作”,因为它们,你知道,是抽象的。)