【问题标题】:Unit Testing for GUIGUI的单元测试
【发布时间】:2016-01-04 01:27:21
【问题描述】:

我最近才开始研究单元测试,并希望在我的网页上实现它(使用 JPA、JSP 和 MySQL)。 我可以理解如何使用 JUnit 测试简单的事情,比如从数据库中检索用户信息,但不明白如何在用户名字段为空白时自动测试登录失败等事情。

【问题讨论】:

  • 为什么需要单元测试?我的意思是你有表示层(JSP)、服务层、持久层(JPA+MySQL),所有这些都参与登录过程。您可以在 JSP 或服务中通过 javascript 验证数据,甚至可以通过数据库约束来验证数据。您想测试其中的哪个单元?
  • 嗯,我想我真正想要的是像使用 Java 的 JUnit 一样在一个地方快速执行自动化测试,而不必手动浏览每个网页以检查是否有任何问题。
  • 如果您正在测试所有层(表示、服务、持久性),而不仅仅是您的 html+js 的行为方式,那么它是集成测试甚至是端到端测试,而您需要用到相应的工具,JUnit不在其中。

标签: java jsp unit-testing testing tdd


【解决方案1】:

如果您想进行单元测试,那么您应该确定要测试的单元。假设您有一个带有登录方法的 SecurityService,该方法接受用户名和密码并返回一个布尔值,指示用户是否登录。然后,您可以只为用户传递 null 以测试它是否返回 false。

如果您有一些 javascript 不允许用户在用户名为空时单击提交,那么您将需要为该部分编写某种 javascript 单元测试,因为它是一个不同的单元。

我发现,在尝试使用 java 编写可测试的 Web 应用程序时,主要的事情是确保您的表示层代码中几乎没有逻辑。确保当用户单击按钮时,您会立即将某些内容发送到某种“服务”以完成工作。这样您就可以独立于表示层来测试服务。

这是我提到的 SecurityService 测试的代码示例。

public class SecurityService
{
    public boolean login(String username, String password)
    {
        //Put your logic here
        return false;
    }
}

这是junit测试

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

public class SecurityServiceTest
{
    private SecurityService securityService;

    @Before
    public void setUp()
    {
        securityService = new SecurityService();
        //Mock any database access you need here, like DAOs.
        //example: securityService.setUserDAO(myMockUserDAO);
    }

    @Test
    public void loginWithNull_False()
    {
        assertFalse(securityService.login(null, "123"));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2019-05-07
    • 2010-09-17
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多