【发布时间】:2011-08-10 10:07:10
【问题描述】:
我有一个 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>
我像这样设置我的编译器和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>
我的测试类如下所示:
@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());
}
到处都是注释:-)
但是当从命令行构建时,我在 when(dataEntityTypeFacade.getEntityTypeFromTypeName(wrong)).thenReturn(null);因为 dataEntityTypeFacade 对象为空。当我在 Eclipse 中运行我的测试用例时,一切都很好,我的模拟对象被实例化,并调用了带有 @Before 注释的方法。
为什么从命令行运行时我的注释似乎被忽略???
/伊娃
【问题讨论】:
-
“从命令行构建”是指 Maven 构建还是其他?
标签: java maven-2 junit mockito