Mockito Testcase忽略了注释

Eva*_*els 6 java junit maven-2 mockito

我有一个Spring Web应用程序,我想为我的控制器进行单元测试.我决定不使用Spring来设置我的测试,而是将Mockito模拟对象与我的控制器结合使用.

我使用Maven2和surefire插件构建并运行测试.这是我的pom.xml

        <!-- Test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.framework.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit</groupId>
            <artifactId>com.springsource.org.junit</artifactId>
            <version>4.5.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.9.0-rc1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

我设置我的编译器和surefire插件,如下所示:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <verbose>true</verbose>
                    <compilerVersion>1.6</compilerVersion>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.4.3</version>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

我的测试类看起来像这样:

@RunWith(MockitoJUnitRunner.class)
public class EntityControllerTest {

private EntityController entityController;

private DataEntityType dataEntityType = new DataEntityTypeImpl("TestType");

@Mock
private HttpServletRequest httpServletRequest;

@Mock
private EntityFacade entityFacade;

@Mock
private DataEntityTypeFacade dataEntityTypeFacade;

@Before
public void setUp() {
    entityController = new EntityController(dataEntityTypeFacade, entityFacade);
}

@Test
public void testGetEntityById_IllegalEntityTypeName() {
    String wrong = "WROOONG!!";
    when(dataEntityTypeFacade.getEntityTypeFromTypeName(wrong)).thenReturn(null);
    ModelAndView mav = entityController.getEntityById(wrong, httpServletRequest);
    assertEquals("Wrong view returned in case of error", ".error", mav.getViewName());
}
Run Code Online (Sandbox Code Playgroud)

各地的注释:-)

但是当从命令行构建时,我在行中得到一个NullPointerException(dataEntityTypeFacade.getEntityTypeFromTypeName(错误)).thenReturn(null); 因为dataEntityTypeFacade对象为null.当我在Eclipse中运行我的测试用例时,一切都很好,我的模拟对象被实例化,并且调用了使用@Before注释的方法.

从命令行运行时,为什么我的注释似乎被忽略了?

/伊娃

And*_*rle 6

你打电话给:

 MockitoAnnotations.initMocks(testClass);
Run Code Online (Sandbox Code Playgroud)

在这里提到的基类或测试运行器:http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#9

  • @Gweebz:没有,[亚军](http://docs.mockito.googlecode.com/hg/latest/org/mockito/runners/MockitoJUnitRunner.html)替换:"初始化嘲笑标注了模拟,以便明确使用MockitoAnnotations.initMocks(Object)是没有必要的." (2认同)