提交 9e1710bc 编写于 作者: W wizardforcel

2020-06-05 19:00:04

上级 e5c037c5
......@@ -4,7 +4,7 @@
[**Maven**](//howtodoinjava.com/maven/ "Maven") 是用于项目依赖和构建管理的好工具。 它可以用于运行项目的 [**Junit**](//howtodoinjava.com/junit/ "JUnit") 测试用例。 在本文中,我将展示一些简单但有用的命令示例,以各种方式运行测试用例。
为了演示,我使用以下命令创建了一个 [**maven java 项目**](//howtodoinjava.com/maven/create-a-simple-java-project-using-maven/ "Create a simple java project using maven")
为了演示,我使用以下命令创建了一个 [**maven java 项目**](//howtodoinjava.com/maven/create-a-simple-java-project-using-maven/ "Create a simple java project using maven")
```java
mvn archetype:generate -DgroupId=com.howtodoinjava.junit -DartifactId=mavenJunitDemo
......@@ -49,7 +49,7 @@ public class TestSurefire {
让我们检查一下 maven 测试命令并查看其输出:
**1)**使用命令**“ mvn test”运行所有测试用例:**该命令将运行测试文件夹中存在的所有测试用例,而不考虑其他任何条件。
1)使用命令“`mvn test`”运行所有测试用例:该命令将运行测试文件夹中存在的所有测试用例,而不考虑其他任何条件。
```java
-------------------------------------------------------
......@@ -69,7 +69,7 @@ Results :
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0
```
**2)**仅使用“- **Dtest = TestSurefire test** ”执行特定的测试类:这将执行测试类 TestSurefire 中的所有测试用例。
2)仅使用“`-Dtest=TestSurefire test`”执行特定的测试类:这将执行测试类`TestSurefire`中的所有测试用例。
```java
-------------------------------------------------------
......@@ -87,9 +87,9 @@ Results :
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
```
您可以在命令中使用多个测试类,甚至可以在测试类名称中使用通配符来匹配一组测试类。 例如 **mvn -Dtest = TestSurefire,TestOth * Class 测试**
您可以在命令中使用多个测试类,甚至可以在测试类名称中使用通配符来匹配一组测试类。 例如`mvn -Dtest=TestSurefire,TestOth*Class test`。
**3)**仅使用“ **mvn -Dtest = TestSurefire#testcaseFirst test** ”在测试类中测试某个测试用例:此命令将仅执行单个测试用例方法,即 testcaseFirst()
3)仅使用“`mvn -Dtest=TestSurefire#testcaseFirst test`”在测试类中测试某个测试用例:此命令将仅执行单个测试用例方法,即`testcaseFirst()`
```java
-------------------------------------------------------
......@@ -104,7 +104,7 @@ Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
```
4)使用通配符映射测试多个测试用例,例如 “ **mvn -Dtest = TestSurefire#testcase * test** ”:这将有助于在一个简单的短命令中运行多个具有相似名称的测试用例。
4)使用通配符映射测试多个测试用例,例如 “`mvn -Dtest=TestSurefire#testcase* test`”:这将有助于在一个简单的短命令中运行多个具有相似名称的测试用例。
```java
-------------------------------------------------------
......@@ -121,6 +121,6 @@ Results :
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
```
给我留言是不清楚的东西,或者我什么都没有
给我留言不清楚,或者我缺少的东西
**祝您学习愉快!**
\ No newline at end of file
# JUnit 4 –基于假设的测试用例
# JUnit 4 – 基于假设的测试用例
> 原文: [https://howtodoinjava.com/junit/assumption-based-testcases-in-junit-4/](https://howtodoinjava.com/junit/assumption-based-testcases-in-junit-4/)
[**Junit**](//howtodoinjava.com/junit/ "junit tutorials") 是 Java 编程语言的单元测试框架。 如果您想阅读有关 [**最佳做法**](//howtodoinjava.com/category/best-practices/ "best practices guides") 的信息,以进行 junit 测试,那么这里是一份出色的 [**指南**](//howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/ "Unit testing best practices : Junit Reference guide") 供您参考。
[**Junit**](//howtodoinjava.com/junit/ "junit tutorials") 是 Java 编程语言的单元测试框架。 如果您想阅读有关[**最佳做法**](//howtodoinjava.com/category/best-practices/ "best practices guides")的信息,以进行 junit 测试,那么这里是一份出色的[**指南**](//howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/ "Unit testing best practices : Junit Reference guide")供您参考。
在本文中,我正在写有关编写 junit 测试用例的信息,这些用例仅在运行时满足特定条件时才能运行。 例如,我只想在其他网络服务启动时才运行测试用例。 如果服务中断,我不想通过测试。
在 junit 中,可以使用“ [**org.junit.Assume**](http://junit.sourceforge.net/javadoc/org/junit/Assume.html "junit assume") ”进行上述操作。 以下是示例用法:
在 junit 中,可以使用“[**`org.junit.Assume`**](http://junit.sourceforge.net/javadoc/org/junit/Assume.html "junit assume")”进行上述操作。 以下是示例用法:
```java
@Test
......@@ -21,9 +21,9 @@ public void testIfVersioonGreaterThan4()
仅当应用版本大于 7 时,以上测试用例才会执行。它实际上是一个很棒的功能,使我们能够编写功能特定的测试用例而不必担心。
当执行上述测试用例时,如果应用版本大于 7 或小于 7,则仅使用 [**@Ignore**](http://junit.sourceforge.net/javadoc/org/junit/Ignore.html "Ignore annotation") 注解而忽略测试用例。 某些 IDE 可能显示出它们执行了测试用例,但实际上并没有执行而只是被忽略了。 您可以通过查看日志进行验证。
当执行上述测试用例时,如果应用版本大于 7 或小于 7,则仅使用[**`@Ignore`**](http://junit.sourceforge.net/javadoc/org/junit/Ignore.html "Ignore annotation")注解而忽略测试用例。 某些 IDE 可能显示出它们执行了测试用例,但实际上并没有执行而只是被忽略了。 您可以通过查看日志进行验证。
如果要忽略单个 java 类中的所有测试用例,则可以在带注解的@Before 方法中使用它。 所有测试用例都将以这种方式被忽略。
如果要忽略单个 java 类中的所有测试用例,则可以在带注解的`@Before`方法中使用它。 所有测试用例都将以这种方式被忽略。
```java
package com.howtodoinjava.test.junit;
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/junit/junit-testcases-which-expects-exception-on-runtime/](https://howtodoinjava.com/junit/junit-testcases-which-expects-exception-on-runtime/)
[**Junit**](//howtodoinjava.com/junit/ "junit tutorials") 是 Java 编程语言的单元测试框架。 如果您想阅读有关 [**最佳做法**](//howtodoinjava.com/category/best-practices/ "best practices guides") 的信息,以进行 junit 测试,那么这里是一份出色的 [**指南**](//howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/ "Unit testing best practices : Junit Reference guide") 供您参考。
[**Junit**](//howtodoinjava.com/junit/ "junit tutorials") 是 Java 编程语言的单元测试框架。 如果您想阅读有关[**最佳做法**](//howtodoinjava.com/category/best-practices/ "best practices guides")的信息,以进行 junit 测试,那么这里是一份出色的[**指南**](//howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/ "Unit testing best practices : Junit Reference guide")供您参考。
在本文中,我正在编写一个示例测试用例,期望在运行时引发异常。 如果它获得预期的异常,则测试通过。 如果未检测到预期的异常,则测试用例失败。
......@@ -40,9 +40,9 @@ public class ExpectedExceptionTest
```
在上述 3 个测试用例中,前两个失败是因为他们期望 ArithmeticException,而在执行测试用例时并没有得到。
在上述 3 个测试用例中,前两个失败是因为他们期望`ArithmeticException`,而在执行测试用例时并没有得到。
第三个测试用例获得通过,因为它期望 NullPointerException 并被测试用例抛出。
第三个测试用例获得通过,因为它期望`NullPointerException`并被测试用例抛出。
这样,您可以编写依赖于某些异常的测试用例,以测试失败时应用的行为。
......
# JUnit 测试监听器– JUnit RunListener 示例
# JUnit 测试监听器– JUnit `RunListener`示例
> 原文: [https://howtodoinjava.com/junit/how-to-add-listner-in-junit-testcases/](https://howtodoinjava.com/junit/how-to-add-listner-in-junit-testcases/)
侦听器通常可以帮助侦听我们感兴趣的事件。 这可能有几个原因。 例如,我们添加了侦听器以添加特定的日志,在 Java GUI 编程中处理 UI 事件等。
监听器通常可以帮助侦听我们感兴趣的事件。 这可能有几个原因。 例如,我们添加了监听器以添加特定的日志,在 Java GUI 编程中处理 UI 事件等。
JUnit 还支持通过 **RunListener** 类执行测试时添加侦听器。 该监听器可用于从改进日志记录到测试特定逻辑的各种目的。
JUnit 还支持通过`RunListener`类执行测试时添加监听器。 该监听器可用于从改进日志记录到测试特定逻辑的各种目的。
## 1\. JUnit RunListener 示例
## 1\. JUnit `RunListener`示例
#### 1.1 JUnit 测试类
......@@ -56,7 +56,7 @@ public class TestFeatureTwo {
#### 1.2 JUnit 测试监听器
让我们编写运行监听器。 该侦听器将扩展 JUnit 提供的 **RunListener** 类。
让我们编写运行监听器。 该监听器将扩展 JUnit 提供的`RunListener`类。
> 我们可以完全不包含任何方法来覆盖任何数量的方法`RunListener`类。
......@@ -121,9 +121,9 @@ public class ExecutionListener extends RunListener
```
## 2\. JUnit 听器执行
## 2\. JUnit 听器执行
现在,让我们运行测试并观察听器的输出。
现在,让我们运行测试并观察听器的输出。
```java
package com.howtodoinjava.junit.suite;
......@@ -163,6 +163,6 @@ Number of tests executed : 2
```
显然,添加听器可通过改进的日志记录支持对测试执行提供额外的控制。
显然,添加听器可通过改进的日志记录支持对测试执行提供额外的控制。
学习愉快!
\ No newline at end of file
......@@ -6,15 +6,15 @@
## 1\. 为什么要编写 JUnit 超时测试?
有时,我们必须编写 JUnit 测试,以访问网络上的某些外部系统。 绝对不能 100% 地确定在执行测试用例时这些外部系统将可用。 这就是为什么在编写具有外部依赖项的测试用例时,建议使用 JUnit 框架的**超时**属性。
有时,我们必须编写 JUnit 测试,以访问网络上的某些外部系统。 绝对不能 100% 地确定在执行测试用例时这些外部系统将可用。 这就是为什么在编写具有外部依赖项的测试用例时,建议使用 JUnit 框架的`timeout`属性。
这也被认为是 [**JUnit 最佳实践**](//howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/ "Unit testing best practices : Junit Reference guide")
> 每个 JUnit 测试都在一个新线程中运行。 如果在测试完成之前经过了指定的超时,则将通过 **Thread.interrupt()**中断其执行。
> 每个 JUnit 测试都在一个新线程中运行。 如果在测试完成之前经过了指定的超时,则将通过`Thread.interrupt()`中断其执行。
## 2\. JUnit 测试超时示例–“超时”属性
## 2\. JUnit 测试超时示例 – `timeout`属性
为了指定某个测试用例的**超时**周期,在注解`@Test`上提到“ **超时**”属性。 例如,`@Test(timeout = 1000)`
为了指定某个测试用例的超时周期,在注解`@Test`上提到“`timeout`”属性。 例如,`@Test(timeout = 1000)`
超时时间以**毫秒**指定。
......@@ -37,9 +37,9 @@ java.lang.Exception: test timed out after 5000 milliseconds
```
## 2\. JUnit 全局超时示例超时规则
## 2\. JUnit 全局超时示例超时规则
可以为类中的所有测试定义 **JUnit Rule** ,而不是为所有测试分别指定超时属性。
可以为类中的所有测试定义 **JUnit 规则**,而不是为所有测试分别指定超时属性。
```java
@Rule
......@@ -67,7 +67,7 @@ public void testInfiniteTametakingLoop2() throws InterruptedException
在上面的示例中,第一个测试将通过,而第二个测试将失败。
Please note that above timeout `@Rule` applies on `@Before` and `@After` methods as well. So use it carefully.
请注意,以上超时时间`@Rule`同样适用于`@Before``@After`方法。 因此,请小心使用。
## 4\. 使用断言的 JUnit 5 超时
......
......@@ -19,7 +19,7 @@ TestNG 使用注解来帮助开发人员编写测试。 下表是包含有关 Te
| [**@AfterMethod**](http://testng.org/javadoc/org/testng/annotations/AfterMethod.html "AfterMethod") | 这些带注解的方法在每个测试方法执行后执行。 |
| [**@DataProvider**](http://testng.org/javadoc/org/testng/annotations/DataProvider.html "DataProvider") | 将方法标记为测试方法的数据提供方法。 所述方法必须返回对象双精度数组(Object [] [])作为数据。 |
| [**@Factory**](http://testng.org/javadoc/org/testng/annotations/Factory.html "Factory") | 将带注解的方法标记为返回类对象数组(Object [])的工厂。 然后,这些类对象将被 TestNG 用作测试类。 这用于运行一组具有不同值的测试用例。 |
| [**@Listeners**](http://testng.org/javadoc/org/testng/annotations/Listeners.html "Listeners") | 应用于测试类。 定义一组扩展 org.testng.ITestNGListener 的测试听器类。 帮助跟踪执行状态和记录目的。 |
| [**@Listeners**](http://testng.org/javadoc/org/testng/annotations/Listeners.html "Listeners") | 应用于测试类。 定义一组扩展 org.testng.ITestNGListener 的测试听器类。 帮助跟踪执行状态和记录目的。 |
| [**@参数**](http://testng.org/javadoc/org/testng/annotations/Parameters.html "Parameters") | 此注解用于将参数传递给测试方法。 这些参数值在运行时使用 testng.xml 配置文件提供。 |
| [**@测试**](https://static.javadoc.io/org.testng/testng/6.8.21/org/testng/annotations/Test.html "Test") | 将类或方法标记为测试方法。 如果在类级别使用,则类的所有公共方法都将被视为测试方法。 |
......
......@@ -188,7 +188,7 @@ Actually, there were zero interactions with this mock.
## 使用模拟设置获取有关测试运行的更多信息
这些模拟设置很少使用,但在某些情况下很有用。 如果您想为模拟命名,以供将来调试之用,请使用它们。 或者您想启用详细日志记录以获取更多信息。 当您要注册一个听器来通知该模拟方法的调用时,可以使用它。 甚至在尚未实现实际对象的模拟对象上实现一些额外的接口。
这些模拟设置很少使用,但在某些情况下很有用。 如果您想为模拟命名,以供将来调试之用,请使用它们。 或者您想启用详细日志记录以获取更多信息。 当您要注册一个听器来通知该模拟方法的调用时,可以使用它。 甚至在尚未实现实际对象的模拟对象上实现一些额外的接口。
```java
@Test
......
......@@ -129,7 +129,7 @@ Example:
```
除上述方法外,onreadystatechange 事件听器非常重要,我们将在下一部分中进行讨论。
除上述方法外,onreadystatechange 事件听器非常重要,我们将在下一部分中进行讨论。
## 4\. 同步和异步 ajax 请求
......@@ -190,7 +190,7 @@ request.send(null)
#### 4.3 onreadystatechange 事件
在上面的示例中,onreadystatechange 是向 XMLHttpRequest 请求注册的事件听器。 onreadystatechange 存储一个函数,该函数将处理从服务器返回的响应。 在请求的生命周期中,所有重要事件都将被调用。 每次在请求处理中完成一个步骤时,readyState 的值都会更改并设置为其他值。 让我们看一下可能的值:
在上面的示例中,onreadystatechange 是向 XMLHttpRequest 请求注册的事件听器。 onreadystatechange 存储一个函数,该函数将处理从服务器返回的响应。 在请求的生命周期中,所有重要事件都将被调用。 每次在请求处理中完成一个步骤时,readyState 的值都会更改并设置为其他值。 让我们看一下可能的值:
0:未初始化请求
1:建立服务器连接
......
......@@ -4,7 +4,7 @@
我们知道什么是 MVC? MVC 代表 [**模型-视图-控制器**](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller "MVC") 。 简而言之,MVC 是一种设计技术,其中将应用组件分为 3 组,以便可以独立开发它们而无需考虑它们将如何交互。 如果构建正确,则很少有配置代码可以绑定它们,并且可以立即使用。
[**PubSub(发布者订阅者)**](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern "pubsub") 模型是设计范式,其中多个订阅者正在侦听源上的更改事件,并且一旦发生任何更改,便会立即通知听器。 在用户交互影响屏幕上多个部分的大型系统中,此模式消除了许多硬编码,并提供了设计灵活性。
[**PubSub(发布者订阅者)**](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern "pubsub") 模型是设计范式,其中多个订阅者正在侦听源上的更改事件,并且一旦发生任何更改,便会立即通知听器。 在用户交互影响屏幕上多个部分的大型系统中,此模式消除了许多硬编码,并提供了设计灵活性。
![PubSub + MVC in JavaScript](img/99dc384aba029061cae775869ac41f18.png)
......@@ -118,9 +118,9 @@ function publish(event) {
```
上面的代码声明了一个数组,该数组可用于存储所有感兴趣的视图以将其自身注册为事件听器。 每当任何事件作为用户交互触发时,都会通知他们该事件。
上面的代码声明了一个数组,该数组可用于存储所有感兴趣的视图以将其自身注册为事件听器。 每当任何事件作为用户交互触发时,都会通知他们该事件。
要将视图注册为事件听器,将使用以下代码:
要将视图注册为事件听器,将使用以下代码:
```java
//Subscribe for updates
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册