我使用spring注释配置进行单元测试以自动装配bean。它在eclipse中运行良好(选择Run as> JUnit ...),但在运行mvn test
时失败(Bean为NULL)。我不知道两者之间有什么不同。我怎么能在maven中运行良好呢?感谢。
PasswordTest.java :
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
public class PasswordTest {
@Configuration
static class ContextConfiguration {
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder passwordEncoder = new org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder();
return passwordEncoder;
}
}
@Autowired(required = true)
private PasswordEncoder encoder;
@Test
public void testPassword() {
String password = encoder.encode("123"); // Line 43 here
System.out.println(password);
assertTrue(password != null && password.length() != 0);
}
}
的pom.xml
...
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
...
Maven输出:
Running com.backend.PasswordTest
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0 sec <<< FAILURE!
com.backend.PasswordTest.testPassword() Time elapsed: 0 sec <<< FAILURE!
java.lang.NullPointerException
at com.backend.PasswordTest.testPassword(PasswordTest.java:43)
答案 0 :(得分:3)
Maven管理JAR和对象生命周期;这就是全部。
我建议您使用JUnit 4.x或更高版本。
你有一个@Autowired注释,它表明你希望Spring管理你的依赖项,但你调用new来实例化你的PasswordEncoder。这两者是相互排斥的。当你打电话给new时,Spring并没有管理那个bean。如果你想让Spring管理它们,不要打电话给新的。应用程序中的所有对象都需要在Spring的控制之下。
我还建议您在不使用Spring的情况下编写单元测试。没有理由这样的开销,特别是对于像这样简单的测试。