一:创建一个测试类,建议将测试类单独放在一个包中(在 maven 项目里有测试类专门的存放位置),新建一个Junit Test Case类,下一步
测试类的命名建议是你将要测试的类名+Test,然后点 Browse, 你可以选择要进行测试的类(一般选择 Service, 因为 Service 关心的是业务需求),用这种方式创建可以自动生成要测试类的测试类,你只需要进行测试代码的书写
@Test
public void testqueryById(){
} @Test
public void testQueryAll(){
} @Test
public void testReduceNumber(){
}123456789101112
如果里面有自动生成的代码,删除或注释即可…
二:配置 spring 和 junit 整合, junit 启动时加载 springIOC 容器,这里你需要 Spring-test jar包
@RunWith(SpringJUnit4ClassRunnerclass) //告诉junitspring配置文件
@ContextConfiguration(locations = {"classpath:spring/spring-daoxml"})123
同样的,在测试类中我们会调用 Service 的逻辑,由于我们使用的是 Spring+SpringMVC+ 持久化框架,所以要注入一个 IService 接口(这里我直接对 DAO 进行测试了)
@Autowired
private SeckillDao seckillDao;12
接下来是测试逻辑,在编写测试代码之前建议覆盖实体中的 toString 方法,不然打印会很麻烦
@Test public void testqueryById(){ long id = 1000;
Seckill seckill = seckillDaoqueryById(id);
Systemoutprintln(seckillgetSeckillName());
Systemoutprintln(seckill);
} //JAVA没有保存形参的记录,如果你在 dao 中传了多个参数,那么需要声明它的形参对应的实参,否则 JVM 会显示找不到参数声明方式稍后奉上
@Test public void testQueryAll(){
List<Seckill> seckills = seckillDaoqueryAll(0, 100); for(Seckill seckill:seckills){
Systemoutprintln(seckill);
}
}
@Test public void testReduceNumber(){
Date killTime = new Date(); //对增加进行测试的时候,只要数据库增加了一条数据,我们就默认这个方法执行成功了
int updateCount = seckillDaoreduceNumber(1000L, killTime);
Systemoutprintln("updateCount = "+updateCount);
}123456789101112131415161718192021222324
解决JAVA不保存形参的记录
int reduceNumber(@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在一定程度上减轻了我们业务代码调试的压力, 让我们关注于一点解决错误
在biz的pom里面加上
<testResources>
<testResource>
<directory> /projectName/src/main/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
软件开发经历了许多阶段,如需求收集和分析、设计、软件开发、测试和发布。测试是 SDLC 不可或缺的一部分,单元测试是一种可靠的测试类型。像 JUnit 和 TestNG 这样优秀的单元测试框架已经成为主流选择,但是关于 TestNG 与 JUnit 的差异的争论一直存在。
测试不是单一的活动,而是涵盖各种测试场景。它以不同的方式分类,其中一种是基于测试级别,例如集成、单元和系统测试。
单元测试涉及测试软件产品中最微小的代码。目的是检查代码的每个组件的质量是否按预期执行。它在开发阶段执行。隔离一段代码以确保其有效性和准确性。代码的单个组件可以是函数、模块、对象或方法。单元测试总是在集成测试之前进行。它有助于在应用程序开发生命周期的早期阶段发现缺陷。开发人员使用不同的单元测试框架来创建单元测试的自动化测试用例。市场上有不同的工具可用于执行单元测试,如 JUnit、NUnit、PHPUnit、JMockit等。
JUnit 于 1997 年作为一个开源的基于 Java 的单元测试框架推出。它是 XUnit 的一部分,它是单元测试框架家族的代表。它允许开发人员编写和运行可重复的测试。
TestNG 是一个基于 Java 的单元测试框架,具有新的和改进的功能。这些新功能包括灵活的测试配置、参数支持、数据驱动测试、注释、各种集成等等。TestNG 执行单元、端到端和集成测试。TestNG 生成报告,帮助开发人员了解所有测试用例的通过、失败和跳过状态。
了解 TestNG 和 JUnit 测试框架之间的区别,有助于选择最适合单元测试框架。
虽然 TestNG 和 JUnit 都是最顶级的基于 Java 的自动化框架,并且各有优缺点。下面分享 JUnit 和 TestNG 框架之间的主要差别:
测试套件由一组测试用例组成,允许同时执行测试。测试套件功能在 JUnit 的早期版本中是不允许的,但在 JUnit 5 中引入,而 TestNG 早早地就支持了该功能。尽管两者都有测试套件,但它们在每个测试套件上执行测试的方式存在关键差异。让我们看一下显示测试套件如何在两个框架中运行的代码片段。
TestNG中的测试套件从 XML 文件运行:
而在 JUnit 中,使用 @RunWith 和 @Suite 等注释,如下面的代码片段所示。两个类 JUnit1 和 JUnit2 是使用注解 @Suite 编写的。
使用 TestNG 对测试人员来说更容易,因为它为他们提供了使用测试套件的多种选择。例如,可以通过将类捆绑到组中来执行测试套件。
FEATURE JUNIT 5 TESTNG 将该方法标记为测试方法 @Test @Test 它在类的第一个测试方法之前执行 @BeforeAll @BeforeClass 它在当前类的所有测试方法都执行完之后执行 @AfterAll @AfterClass 它在每个测试方法之前执行 @BeforeEach @BeforeMethod 在每个测试方法之后执行 @AfterEach @AfterMethod 它在套件中的所有测试运行之前执行 NA @BeforeSuite 它在套件中的所有测试都运行后执行 NA @AfterSuite 测试前执行 NA @BeforeTest 测试后执行 NA @AfterTest 在任何这些组的第一个测试方法之前执行 NA @BeforeGroups 在任何这些组的第一个测试方法之后执行 NA @AfterGroups 忽略测试 @Disabled (In JUnit4 it is @ignore) @Test(Enable=false) 预期异常 @Test(expected=Arithmetic @Test(expectedException=Arithmetic Exceptionclass) 超时 @Timeout @Test(timeout = 1000)
PS:在 JUnit 4 中, @BeforeClass 和 @AfterClass 方法被认为是静态的,而在 TestNG 中没有这样的限制。
管理测试执行是一项重要任务;与 JUnit 相比,TestNG 使这项任务更容易。
这个功能目前只有 TestNG 支持。 它涉及通过创建多个组来执行任务。每个都包含各种测试类,并且可以在单独的组中运行测试,而不是运行孤立的测试。它使用 @Test 注解中的参数。
@Test(groups={"groupname1",,})
在 TestNG 中,可以在 或 标记下轻松识别。
不需要执行来自大型测试套件的某些测试,尤其是只想测试特定功能时。此功能包含了是否应忽略或考虑特定的单元测试。JUnit和TestNG都配备了这个特性,以及前面讨论的所有注释。在 JUnit 中,此功能使用 @ignore 注解:
而在 TestNG 中,它使用 @Test(enabled = false) 注释运行。
参数化可以理解是数据驱动的测试,可以减少代码量并提高其可读性。TestNG 与 JUnit 提供此功能的方式有所不同。TestNG有一种简单的方法来修复测试用例中的参数。它利用 @Parameter 注释并将参数添加到给定的测试方法。 browser 的值在 XML 文件(例如 testngxml )中说明,而 JUnit 使用 @ParameterizedTest 注释。
这个功能表示一种测试方法何时依赖于另一种测试方法。JUnit目前不支持此功能。TestNG支持多种类型的测试。在TestNG中,依赖方法使用 @DependsOnMethods 注解。
此功能验证在测试执行期间遇到错误时要使用的异常。TestNG 和 JUnit 都支持此功能,但处理异常的方式略有不同。TestNG 在 @Test 注解中使用了 expectedException 参数 。
在 JUnit 中, assertThrows API 用于异常处理:
这个功能指测试执行中的超时功能,该功能设置时间限制,当超过该时间限制时,测试会自动失败。TestNG 和 JUnit 都以相同的语法提供此功能。
JUnit:
TestNG:
许多测试框架都支持自动化测试,具体取决于测试的目标。TestNG 和 JUnit 都是自动化单元测试领域最受信任的框架。TestNG 克服了 JUnit 的诸多不便,简化了测试人员的工作。使用 TestNG,可以执行单元测试、集成测试和端到端测试,而 JUnit 仅涵盖单元测试。
可以说要落实断言。否则不必用Junit了。自己写个启动程序就搞定了。如:你在返回可能值存在N个,你要写至少N个断言。你可以断言,某参数返回某值,或不返回某值,或抛出某异常。类似setter方法,你可以断言其getter方法的结果或断言setter方法抛出某些异常。尤其注意临界点,如:M>=2,你至少要断言M=2时的结果,这很重要。通过断言,Junit可以报告出现多少错误。自己写一般测到某点出现错误即中止,当然你可以写存储,继续向下执行,不过这样你相当于实现了一个简单的Junit在功能,就效率和时间而言,不支持,如果你想了解,可以去看Junit在原码,即学到东西,也减少时间浪费。祝你早日掌握Junit
以上就是关于如何使用junit测试javaweb工程全部的内容,包括:如何使用junit测试javaweb工程、java junit的怎样通过注解加载配置文件、JUnit VS TestNG等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)