java - Spring 服务层的 JUnit 测试用例

标签 java unit-testing spring-mvc groovy junit4

我正在尝试配置 JUnit 并为 Spring 3.2 MVC 应用程序的服务层编写测试用例。我找不到很多关于如何从头开始配置 JUnit 并使其适用于 Spring 服务层的信息。这是我的问题

我真的不知道要使用什么版本的 junit 所以我只是捕获了最新版本

Maven junit 依赖

 <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

我的服务等级

@Service
public class AuthService implements IAuthService, ApplicationContextAware,
        org.springframework.context.ApplicationListener<org.springframework.context.event.ContextRefreshedEvent> {

public Collection<? extends String> addCommandPermissions(Session session, CommandMetadata command) {

    Set<String> result = new HashSet<String>();
    String commandName = command.getBeanName();
    String defaultAdministerPermission = command.getAdministerPermission()
    String defaultExecutePermission = command.getExecutePermission()
    String overrideAdminPermission = null;
    String overrideExecPermission = null;
    String finalAdministerPermission = overrideAdminPermission == null ? defaultAdministerPermission
            : overrideAdminPermission;
    command.setAdministerPermission(finalAdministerPermission);
    result.add(finalAdministerPermission);
    String finalFxecutePermission = overrideExecPermission == null ? defaultExecutePermission
            : overrideExecPermission;
    command.setExecutePermission(finalFxecutePermission);
    result.add(finalFxecutePermission);
    try {
        session.saveOrUpdate(command);
        session.flush();
    } finally {
        // TODO - more swallowed exceptions.
    }
    return result;
}

// some other methods
}

我的测试类(部分使用了groovy)

import junit.framework.TestCase;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.test.context.ContextConfiguration;
import com.dc.core.security.service.impl.AuthService
import com.dc.core.behavior.command.model.impl.CommandMetadata;
import org.hibernate.SessionFactory
import org.hibernate.classic.Session

@ContextConfiguration(locations = "file:WebContent/WEB-INF/applicationContext.xml")
public class AuthServiceTest extends TestCase {

    @Autowired
    private AuthService authService;

    @Autowired
    private MockHttpSession mockHttpSession;

    @Autowired
    ApplicationContext appContext

    @Autowired
    SessionFactory sessionFactory

    private Session mockHibernateSession = Mockito.mock(org.hibernate.classic.Session.class);

    private CommandMetadata commandMetadata = new CommandMetadata();

    public void setUp() {
       appContext.getBeanFactory().registerScope("request", new RequestScope())
       MockHttpServletRequest request = new MockHttpServletRequest()

        ServletRequestAttributes attributes = new ServletRequestAttributes(request)
        RequestContextHolder.setRequestAttributes(attributes)
        CurrentRequestProperties currentRequestProperties = appContext.getBean("currentRequestProperties")
        session = sessionHandler.initiateSession(sessionFactory, currentRequestProperties)


    }

    public void testAddCommandPermissions() {
        commandMetadata.beanName = "TestBean"
        commandMetadata.administerPermission = "TestBean.administer"
        commandMetadata.executePermission = "TestBean.execute"
        Collection<String> results = authorizationService.addCommandPermissions(session, commandMetadata);
        assertTrue(results.contains("TestBean.administer"))
    }

    public void testCanary() {
        assertTrue(true);
    }
}

当我运行我的测试用例时出现以下错误 java.lang.NullPointerException: 无法在空对象上调用方法 getBeanFactory()

我认为问题的原因是 appContext 未正确注入(inject),因此出现 NPE。但我无法解决这个问题。我真的很感谢有人在这方面的帮助

最佳答案

添加 Spring JUnit 类运行程序。您还应该使用 @Test 注释而不是扩展 TestCase。

例如

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})

关于java - Spring 服务层的 JUnit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091778/

相关文章:

java - nHibernate 使用 OR 进行动态查询

java - 从 Java 代码调用 SQL 查询

java - 即使所有字段都相同,地址相等也会失败

spring - 异步 REST API 生成警告

spring-mvc - Spring MVC 3.2 - XStreamAlias 被忽略

JavaFX:设置每列最小宽度

java - 将多个参数传递给 web.xml 中的 org.apache.cxf.jaxrs.swagger.Swagger2Feature

javascript - Mocha/Chai 异步测试 'done()' fn 不工作

python - 如何模拟 Python 静态方法和类方法

eclipse - 使用 Eclipse 的 Spring Web Flow 教程