Java单元测试——容器内部测试

简介: Java单元测试——容器内部测试

1 HttpUnit


package HttpUnit.com.jerry;
import static org.junit.Assert.*;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
import org.xml.sax.SAXException;
import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.HttpUnitOptions;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebLink;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
public class WebTest {
  private  WebConversation wc;
  @Before
  public void setUp(){
    wc = new WebConversation();
  }
  @Test
  public void testEBusiness() throws IOException, SAXException {
    HttpUnitOptions.setScriptingEnabled(false);
    String username = "cindy";
    String password = "123456";
    WebRequest req = new PostMethodWebRequest("http://127.0.0.1:8000/login_action/");
    //给请求加上参数
    req.setParameter("username",username);
    req.setParameter("password",password);
    //获取响应对象
    WebResponse resp = wc.getResponse(req);
    //用getText方法获取相应的全部内容
    assertTrue(resp.getText().contains("购物车"));
  }
  @Test
  public void test3testing() throws IOException, SAXException {
    HttpUnitOptions.setScriptingEnabled(false);
    String CheckWord = "测试";
    WebResponse req = wc.getResponse("http://www.3testing.com/include/head.htm");
    WebLink link = req.getLinkWith("我的课程");
    link.click();
    WebResponse nextLink = wc.getCurrentPage();
    assertTrue(nextLink.getText().contains(CheckWord));
  }
}


2 DbUnit


AbstractDbUnitTestCase.java

package DbUnit.com.jerry;
import static org.junit.Assert.*;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ReplacementDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.ext.hsqldb.HsqldbConnection;
import org.junit.AfterClass;
import org.junit.BeforeClass;
public abstract class AbstractDbUnitTestCase {
  public static final String USER_FIRST_NAME = "Jeffrey";
  public static final String USER_LAST_NAME = "Lebowsky";
  public static final String USER_USERNAME = "ElDuderino";
  protected static UserDaoJdbcImpl dao = new UserDaoJdbcImpl();
  protected static Connection connection;
  protected static HsqldbConnection dbunitConnection;
  @BeforeClass
  public static void setupDatabase() throws Exception {
  String driverName="com.mysql.jdbc.Driver";
  String userName="root";
  String userPasswd="123456";
  String dbName="hr";
  String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
    Class.forName(driverName).newInstance(); 
    connection = DriverManager.getConnection(url);
    dbunitConnection = new HsqldbConnection(connection,null);
    dao.setConnection(connection);
    dao.createTables();
  }
  @AfterClass
  public static void closeDatabase() throws Exception {
    if ( dbunitConnection != null ) {
      dao.dropTables();
      dbunitConnection.close();
      dbunitConnection = null;
    }
  }
  public static IDataSet getDataSet(String name) throws Exception {
    InputStream inputStream = new FileInputStream(name);
    assertNotNull("file " + name + " not found in classpath", inputStream );
    Reader reader = new InputStreamReader(inputStream);
    FlatXmlDataSet dataset = new FlatXmlDataSet(reader);
    return dataset;
  }
  public static IDataSet getReplacedDataSet(String name, long id) throws Exception {
    IDataSet originalDataSet = getDataSet(name);
    return getReplacedDataSet(originalDataSet, id);
  }
  public static IDataSet getReplacedDataSet(IDataSet originalDataSet, long id) throws Exception {
    ReplacementDataSet replacementDataSet = new ReplacementDataSet(originalDataSet);
    replacementDataSet.addReplacementObject("[ID]", id);
    replacementDataSet.addReplacementObject("[NULL]", null);
    return replacementDataSet;
  }
  public static User newUser() {
      User user = new User();
      user.setFirstName(USER_FIRST_NAME);
      user.setLastName(USER_LAST_NAME);
      user.setUsername(USER_USERNAME);
      return user;
    }
  public static void assertUser(User user) {
      assertNotNull(user);
      assertEquals(USER_FIRST_NAME, user.getFirstName());
      assertEquals(USER_LAST_NAME, user.getLastName());
      assertEquals(USER_USERNAME, user.getUsername());
    }
}


UserDaoJdbcImplTest.java

package DbUnit.com.jerry;
import static org.junit.Assert.*;
import org.dbunit.Assertion;
import org.dbunit.dataset.IDataSet;
import org.dbunit.operation.DatabaseOperation;
import org.junit.Test;
public class UserDaoJdbcImplTest extends AbstractDbUnitTestCase{
  @Test
  public void testGetUserById() throws Exception {
    IDataSet setupDataSet = getDataSet("Test/DbUnit/com/jerry/user.xml");
    DatabaseOperation.CLEAN_INSERT.execute(dbunitConnection, setupDataSet);
    User user = dao.getUserById(1);
    assertNotNull( user);
    assertEquals( "Jeffrey", user.getFirstName() );
    assertEquals( "Lebowsky", user.getLastName() );
    assertEquals( "ElDuderino", user.getUsername() );
  }
  @Test
  public void testAddUseIgnoringId() throws Exception {
    IDataSet setupDataSet = getDataSet("Test/DbUnit/com/jerry/user.xml");
    DatabaseOperation.DELETE_ALL.execute(dbunitConnection, setupDataSet);
    User user = newUser();
    int id = dao.addUser(user);
    assertTrue(id>0);
    IDataSet expectedDataSet = getDataSet("Test/DbUnit/com/jerry/user.xml");
    IDataSet actualDataSet = dbunitConnection.createDataSet();
    Assertion.assertEqualsIgnoreCols( expectedDataSet, actualDataSet, "users", new String[] { "id" } );
  }
  @Test
  public void testGetUserByIdReplacingIds() throws Exception {
  int id = 42;
    IDataSet setupDataset = getReplacedDataSet("Test/DbUnit/com/jerry/user-token.xml", id );
    DatabaseOperation.INSERT.execute(dbunitConnection, setupDataset);
    User user = dao.getUserById(id);
    assertUser(user);
  }
  @Test
  public void testAddUserReplacingIds() throws Exception {
    IDataSet setupDataSet = getDataSet("Test/DbUnit/com/jerry/user-token.xml");
    DatabaseOperation.DELETE_ALL.execute(dbunitConnection, setupDataSet);
    User user = newUser();
    int id = dao.addUser(user);
    assertTrue(id>0);
    IDataSet expectedDataSet = getReplacedDataSet(setupDataSet, id );
    IDataSet actualDataSet = dbunitConnection.createDataSet();
    Assertion.assertEquals( expectedDataSet, actualDataSet );
  }
}


user-token.xml

<?xml version="1.0"?>
<dataset>
  <users id="[ID]" username="ElDuderino" first_name="Jeffrey" last_name="Lebowsky" />
</dataset>


user.xml

<?xml version="1.0"?>
<dataset>
  <users id="1" username="ElDuderino" first_name="Jeffrey" last_name="Lebowsky" />
</dataset>


目录
相关文章
|
4月前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
161 2
|
6月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
606 0
|
11月前
|
缓存 监控 负载均衡
如何提升 API 性能:来自 Java 和测试开发者的优化建议
本文探讨了如何优化API响应时间,提升用户体验。通过缓存(如Redis/Memcached)、减少数据负载(REST过滤字段或GraphQL精确请求)、负载均衡(Nginx/AWS等工具)、数据压缩(Gzip/Brotli)、限流节流、监控性能(Apipost/New Relic等工具)、升级基础设施、减少第三方依赖、优化数据库查询及采用异步处理等方式,可显著提高API速度。快速响应的API不仅让用户满意,还能增强应用整体性能。
|
7月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
253 0
|
7月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
8月前
|
存储 缓存 安全
Java 集合容器常见面试题及详细解析
本文全面解析Java集合框架,涵盖基础概念、常见接口与类的特点及区别、底层数据结构、线程安全等内容。通过实例讲解List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)、Map(如HashMap、TreeMap)等核心组件,帮助读者深入理解集合容器的使用场景与性能优化。适合准备面试或提升开发技能的开发者阅读。
140 0
|
8月前
|
缓存 Java API
Java 集合容器实操技巧与案例详解
本教程基于Java 8+新特性和现代开发实践,深入讲解Java集合容器的实操技巧。通过具体场景演示Stream API数据处理、ConcurrentHashMap并发控制、LinkedHashMap实现LRU缓存、TreeSet自定义排序等高级特性。同时涵盖computeIfAbsent优化操作、EnumMap专用集合使用、集合统计与运算(交集、并集、差集)等内容。代码示例丰富,助力掌握高效编程方法。[点击获取完整代码](https://pan.quark.cn/s/14fcf913bae6)。
139 0
|
11月前
|
网络协议 Shell 网络安全
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
235 2
Java容器及其常用方法汇总
|
监控 Java 中间件
8G的容器Java堆才4G怎么就OOM了?
本文记录最近一例Java应用OOM问题的排查过程,希望可以给遇到类似问题的同学提供参考。