㈠ Junit怎么测试数据库查询方法
@Test
public void jdbcTest() throws ClassNotFoundException, SQLException{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ; //环境变量中需要有mysql的驱动包
//简历链接
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
Connection con = DriverManager.getConnection(url , username , password ) ;
//创建stat 并执行查询,获得结果集resultSet
Statement stat = con.createStatement();
ResultSet resultSet = stat.executeQuery("select * from 你的表 ");
//遍历查询结果集
//1 获得元数据(就是字段名称)
ResultSetMetaData metad = resultSet.getMetaData();
int column = metad.getColumnCount();
System.out.println("查询结果为【"+column+"】列");
// System.out.println("查询结果为【"+metad.+"】条");
StringBuffer sb = new StringBuffer();
while(resultSet.next()){
for (int i = 0; i < column; i++) {
sb.append("字段:【"+metad.getColumnName(i)+"】,字段值【"+resultSet.getString(i)+"】\t");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
㈡ 如何使用junit测试javaweb工程
一:创建一个测试类,建议将测试类单独放在一个包中(在 maven 项目里有测试类专门的存放位置),新建一个Junit Test Case类,下一步
测试类的命名建议是你将要测试的类名+Test,然后点 Browse, 你可以选择要进行测试的类(一般选择 Service, 因为 Service 关心的是业务需求),用这种方式创建可以自动生成要测试类的测试类,你只需要进行测试代码的书写.
@Test
public void testqueryById(){
} @Test
public void testQueryAll(){
} @Test
public void testReceNumber(){
}123456789101112
如果里面有自动生成的代码,删除或注释即可…
二:配置 spring 和 junit 整合, junit 启动时加载 springIOC 容器,这里你需要 Spring-test jar包
@RunWith(SpringJUnit4ClassRunner.class) //告诉junitspring配置文件
@ContextConfiguration(locations = {"classpath:spring/spring-.xml"})123
同样的,在测试类中我们会调用 Service 的逻辑,由于我们使用的是 Spring+SpringMVC+ 持久化框架,所以要注入一个 IService 接口(这里我直接对 DAO 进行测试了)
@Autowired
private SeckillDao seckillDao;12
接下来是测试逻辑,在编写测试代码之前建议覆盖实体中的 toString 方法,不然打印会很麻烦.
@Test public void testqueryById(){ long id = 1000;
Seckill seckill = seckillDao.queryById(id);
System.out.println(seckill.getSeckillName());
System.out.println(seckill);
} //JAVA没有保存形参的记录,如果你在 中传了多个参数,那么需要声明它的形参对应的实参,否则 JVM 会显示找不到参数.声明方式稍后奉上
@Test public void testQueryAll(){
List<Seckill> seckills = seckillDao.queryAll(0, 100); for(Seckill seckill:seckills){
System.out.println(seckill);
}
}
@Test public void testReceNumber(){
Date killTime = new Date(); //对增加进行测试的时候,只要数据库增加了一条数据,我们就默认这个方法执行成功了
int updateCount = seckillDao.receNumber(1000L, killTime);
System.out.println("updateCount = "+updateCount);
}
解决JAVA不保存形参的记录
int receNumber(@Param("seckillId")long seckillId,@Param("killTime")Date killTime);
Seckill queryById(long seckillId); /**
* mysql的分页查询
* @param offset 告诉它实际的形参
* @param limit
* @return
*/
List<Seckill> queryAll(@Param("offset")int offset,@Param("limit")int limit);1234567891011
接下来我们根据他返回的结果和我们想要的结果对应就可以了. 测试类不用部署项目, 测试周期非常短, 而且可以进行专项测试. 测试类代码逻辑十分简单, 几乎不会出错. 如果结果不是预期的, 那么根据你的需求修改!
当然, 它的局限性也很打. 从单元测试不能看出页面传值的错误, 许多项目在服务器中的表现也不能模拟.
那么我们什么时候用junit呢?
当你的数据库操作非常复杂, 你不确定能输出你想要的值的时候, 相比用 debug 调试, 使用 Junit 是更方便的手段.或者新手出错概率非常大, 也不用在服务器中专门测试项目的表现, Junit 是个必备的工具!而且测试类的测试代码重用性很高.
如果你的数据和预期相悖, 那么修改业务逻辑; 否则, 查看页面是否有错! Junit在一定程度上减轻了我们业务代码调试的压力, 让我们关注于一点解决错误.
㈢ java中框架Junit应该怎么使用
java中Junit应用介绍:
assert exp1;//exp1 为boolean类型的值
assert exp1:message;//message 为如果exp1不是true的时候,要提示的错误消息
断言一般作用:代码运行前写断言判断必须满足的条件;代码运行后判断必须符合的标准;确定代码运行过程中有无改变某些不应该变的东西
2.junit中的Assert类提供了很多方法,替代断言,参照api:http://www.udel.e/CIS/software/dist/junit4.1/javadoc/org/junit/Assert.html
assertEquals、assertFalse、assertTrue、assertNotNull、assertNull、assertSame、fail
3.注解
@interface用来定义注解
@Retention用来声明注解的保留策略,有CLASS(注解保存在class文件中)、RUNTIME(运行时可用)和SOURCE(仅在源代码中)这三种
@Target用来声明注解可以被添加在哪些类型的元素上:注解、类、方法、方法参数、构造、字段、方法中的普通变量
定义一个能在方法上使用的注解:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface KennethTest {}
写一个测试类
public class Test {
@KennethTest public void test1(){System.out.println("test1");}
public void test2(){System.out.println("test2");}
@KennethTest public void test3(){System.out.println("test3");}
}
执行一个类中所有标记KennethTest的方法
public class Main {
public static void main(String[] args) throws Exception{//反射
Class classObj=Test.class;//获取Test的类对象
Object obj=classObj.newInstance();//调用无参数构造,新建一个Test的对象
Method[] methods=classObj.getMethods();//获取Test类中所有public方法
for(Method method:methods){
if(method.getAnnotation(KennethTest.class)!=null){//看这个方法是否有KennethTest注解
method.invoke(obj);//如果这个方法有KennethTest注解,那么这个方法被调用执行
}
}
}
}
4.junit中的注解
@Test @Test(expected=IndexOutOfBoundsException.class) 测试方法抛出这个异常就能通过测试 @Test(timeout=10) 测试方法不能超过10毫秒
@Ignore 忽略测试
@Before 每个测试方法之前执行
@After 每个测试方法之后执行
@BeforeClass 在加载类时执行
@AfterClass 在所有测试方法执行结束,如果有after的话,所有after也执行结束后执行
5.通常写测试代码的规则:
1)产品源代码和测试源代码要分开,包名类名一致 例如 org.ken.PersonDao 对应测试代码可以为 test.org.ken.PersonDaoTest
2)一个有功能类要写至少一个测试类
3)一个方法代表一个用例 用例之间要保持独立(最好不要互相调用)
㈣ junit如何测试访问数据库的类
关于junit单元测试工具的安装请参看第二课的内容(其实就是导入一个junit的jar包就行了)
首先认识几个注解标签
@Test:测试方法
@Before:初始化方法
@After:释放资源
执行顺序:@Before->@Test->@After
第一步新建测试文件夹(目的就是用来存放测试类,使项目更整洁,分类明确,好管理)
选中项目右键new->Source Folder 输入文件夹的名称例如test
在测试文件夹下创建测试类(就是创建个普通的类)
如下在测试类中使用junit进行单元测试
下面只是先搭建一个测试框架
搭建好之后测试hibernate访问数据库的代码注意:导入的包不要弄错,都是hibernate的包
public class StudentTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init(){ //创建配置对象 Configuration config = new Configuration(); //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); //创建会话工厂对象 sessionFactory = config.buildSessionFactory(serviceRegistry); //会话对象 session = sessionFactory.openSession(); //开启事务 transaction = session.beginTransaction(); } @Test public void testSaveStudents(){ Student s = new Student(1, "小明", new Date(), "北京xxxx街道5号楼201"); session.save(s);//保存对象到数据库 } @After public void destory(){ transaction.commit();//提交事务 session.close();//关闭会话 sessionFactory.close();//关闭会话工厂 }}
进行测试如下: 选中测试方法右键run as ->junit test就行了
执行成功控制台打印信息:
查看数据库表
可以看到增加了一条信息,测试成功
㈤ 我用Junit 写了一个MySQL数据库连接的测试类,为什么会报错
你的jdbc.properties应该是放在classpath下的,应该这样加载:
JunitTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
如果你的jdbc.properties跟JunitTest放在一个文件夹下(包),可以用:
JunitTest.class.getResourceAsStream("jdbc.properties");
你应该知道二者的区别了吧:
Class.getResourceAsStream("") 会指定要加载的资源路径与当前类所在包的路径一致。
ClassLoader.getResourceAsStream("") 无论要查找的资源前面是否带'/' 都会从classpath的根路径下查找。