这是我在JUnit中遇到的奇怪情况。
鉴于:
我需要创建单元测试来测试抽象类中定义的方法。
为此,我创建了一个 ConcreteAbstractClassImpl ,它扩展了 AbstractClass ,并为其中的抽象方法提供了虚拟响应。 / p>
为了定义测试,我创建了一个测试类 ConcreteAbstractClassImplTest 。 AbstractClass的所有非抽象方法都在本课程中使用 @Test 进行单元测试。
下面提供的代码示例:
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";
}
}
问题: 测试类运行完美,并通过 Run As>在Eclipse中单独运行时识别每个测试用例。 Junit测试。但是当我使用 Run As>构建整个项目时在pom.xml上的Maven Build 和取消选中Skip Tests ,JUnit会忽略 ConcreteAbstractClassImplTest 中提到的所有测试。 JUnit可以正确识别不遵循上述模式的常规测试类。我不知道这是JUnit中的错误还是什么,但如果有人有解决方法/解决方法,那将会很有帮助。
由于跳过了测试类,此问题也影响了我的Sonar覆盖率。