Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit不识别抽象类的具体实现中定义的@testcases_Java_Unit Testing_Junit_Abstract Class - Fatal编程技术网

Java JUnit不识别抽象类的具体实现中定义的@testcases

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.*;

这是我在JUnit中面临的一个奇怪的情况

给定:

  • 我需要创建单元测试来测试抽象类中定义的方法

  • 为此,我创建了一个ConcreteAbstractClassImpl,它扩展了AbstractClass,并为其中的抽象方法提供了虚拟响应

  • 为了定义测试,我创建了一个测试类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";
         }
    }
    
    问题: 测试类运行良好,通过runas>junittest在Eclipse中单独运行时可以识别每个测试用例。但是,当我在pom.xml上使用Run As>Maven build构建整个项目,并且取消选中跳过测试时,JUnit会忽略ConcreteAbstractClassImplTest中提到的所有测试。JUnit可以正确识别不遵循上述模式的常规测试类。我不知道这是JUnit中的一个bug还是什么,但是如果有人对此有一个解决方法/修复程序,这将非常有帮助


    由于跳过了测试类,此问题也影响了我的声纳覆盖率。

    为什么要模拟要测试的类?不,我没有。我需要测试的类是AbstractClass,它的具体实现是ConcreteAbstractClassImpl-->我为其创建了ConcreteAbstractClassImplTest,我在其中模拟“DependencyClass对象”,并使用InjectMock将其注入ConcreteAbstractClassImpl。我知道,这太令人困惑了根据此线程,您使用了错误的运行程序()。如果您的意思是,我应该使用MockitoJUnitRunner而不是PowerMockRunner,请注意,我尝试了,但没有成功:(这不是我要问的。你有使用这些的测试类吗?还有:你为什么要测试抽象类?它们永远不会在自己的私有范围内“工作”,因为它们,你知道,是抽象的。)