测试spring注释配置在eclipse中传递但是maven

时间:2015-08-01 16:57:27

标签: java spring maven junit

我使用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)

1 个答案:

答案 0 :(得分:3)

Maven管理JAR和对象生命周期;这就是全部。

我建议您使用JUnit 4.x或更高版本。

你有一个@Autowired注释,它表明你希望Spring管理你的依赖项,但你调用new来实例化你的PasswordEncoder。这两者是相互排斥的。当你打电话给new时,Spring并没有管理那个bean。如果你想让Spring管理它们,不要打电话给新的。应用程序中的所有对象都需要在Spring的控制之下。

我还建议您在不使用Spring的情况下编写单元测试。没有理由这样的开销,特别是对于像这样简单的测试。