提交 ff078aab 编写于 作者: W wizardforcel

2020-06-06 10:51:20

上级 c400f7bf
......@@ -51,7 +51,7 @@ Hibernate 中有一个简单直观的 API,可以对数据库表示的对象执
1. **`hibernate.cfg.xml`** - 此配置文件将用于存储数据库连接信息和架构级别设置。
2. **`EmployeeEntity.java`** - 此类将引用具有 Hiberate 注解的 Java POJO。
3. **`HibernateUtil.java`** – 此类将具有实用程序方法,这些方法将用于创建会话工厂和会话对象。
3. **`HibernateUtil.java`** – 此类将具有工具方法,这些方法将用于创建会话工厂和会话对象。
4. **`TestHibernate.java`** - 此类将用于测试我们的配置设置和`Emplyee`实体注解。
在进入代码之前,让我们看一下项目的设置并添加 [**maven**](https://maven.apache.org/ "maven") 依赖项,这些依赖项需要添加到`pom.xml`以包括所有编译时间和运行时依赖项。
......
......@@ -49,7 +49,7 @@ public final class MathUtils
#### 2.2 参数化测试
让我们为上述数学实用程序类编写参数化测试。
让我们为上述数学工具类编写参数化测试。
```java
......
......@@ -84,7 +84,7 @@ PASSED: testMethodThree
```
恭喜,您已经使用 Eclipse 中的 TestNG 运行器配置成功执行了属于特定组的测试方法。 您还可以通过在“浏览”部分中选择相应的组来使用该实用程序执行多个组。 通常,最好使用基于 TestNG-XML 的执行来执行属于特定组的测试方法。
恭喜,您已经使用 Eclipse 中的 TestNG 运行器配置成功执行了属于特定组的测试方法。 您还可以通过在“浏览”部分中选择相应的组来使用该工具执行多个组。 通常,最好使用基于 TestNG-XML 的执行来执行属于特定组的测试方法。
## 通过`testng.xml`运行 TestNG 组
......
......@@ -62,15 +62,15 @@ public void saveTest()
```
###### @Mock 和@Spy 之间的区别
###### `@Mock`和`@Spy`之间的区别
使用@Mock 时,mockito 将创建 Class 的准系统 shell 实例,完全可以跟踪与之的交互。 这不是真实的对象,也不维护其状态更改。
使用`@Mock`时,mockito 将创建类的准系统的 shell 实例,完全可以跟踪与之的交互。 这不是真实的对象,也不维护其状态更改。
使用@Spy 时,mockito 创建类的真实实例并跟踪与之的每次交互。 它保持状态更改。
使用`@Spy`时,mockito 创建类的真实实例并跟踪与之的每次交互。 它保持状态更改。
#### 1.3 @捕捉者
#### 1.3 `@Captor`
**@Captor** 注解用于创建`ArgumentCaptor`实例,该实例用于**捕获方法参数值**进行进一步的声明。
`@Captor`注解用于创建`ArgumentCaptor`实例,该实例用于**捕获方法参数值**进行进一步的声明。
请注意,mockito 使用参数类的`equals()`方法验证参数值。
......@@ -97,13 +97,13 @@ public void saveTest()
```
#### 1.4 @InjectMock
#### 1.4 `@InjectMock`
Mock中,我们需要创建要测试的类的对象,然后插入其依赖项(*模拟*)以完全测试行为。 为此,我们使用 **@InjectMock** 注解。
Mock 中,我们需要创建要测试的类的对象,然后插入其依赖项(*模拟*)以完全测试行为。 为此,我们使用`@InjectMock`注解。
@InjectMock 标记应在其上执行注射的字段。 Mockito 将尝试仅通过构造器注入,setter 注入或属性注入按此顺序注入模拟。 如果任何给定的注射策略失败,则 Mockito 不会报告失败。
`@InjectMock`标记应在其上执行注射的字段。 Mockito 将尝试仅通过构造器注入,设置器注入或属性注入按此顺序注入模拟。 如果任何给定的注射策略失败,则 Mockito 不会报告失败。
> 阅读更多: [@Mock 和@InitMock 注解之间的区别](https://howtodoinjava.com/mockito/mockito-mock-initMock/)
> 阅读更多: [`@Mock`和`@InitMock`注解之间的区别](https://howtodoinjava.com/mockito/mockito-mock-initMock/)
## 2\. 如何初始化 Mockito 注解
......@@ -126,7 +126,7 @@ public void saveTest()
```
2. 在单元测试类的 **@Before** 方法中使用`MockitoAnnotations.initMock(this)`
2. 在单元测试类的`@Before`方法中使用`MockitoAnnotations.initMock(this)`
```java
public class ExampleTest {
......@@ -166,13 +166,13 @@ public void saveTest()
```
在评论中,将您与*模拟注解*有关的问题放到我这里。
在评论中,将您与 Mockito 注解有关的问题放到我这里。
学习愉快!
参考文献:
[模拟 Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Mock.html)
[Spy Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Spy.html)
[Captor Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Captor.html)
[InjectMock Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/InjectMock.html)
\ No newline at end of file
[`Mock` Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Mock.html)
[`Spy` Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Spy.html)
[`Captor` Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Captor.html)
[`InjectMock` Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/InjectMock.html)
\ No newline at end of file
# Mockito – @Mock 和@InjectMock 注解之间的区别
# Mockito – `@Mock`和`@InjectMock`注解之间的区别
> 原文: [https://howtodoinjava.com/mockito/mockito-mock-injectMock/](https://howtodoinjava.com/mockito/mockito-mock-injectMock/)
在使用 [junit](https://howtodoinjava.com/junit-4/) 和 Mockito 进行[单元测试](https://howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/)的过程中,我们使用`@Mock``@InjectMock`注解来创建要测试的对象和依赖项。 了解 mockito 中@Mock 和@InjectMock 注解之间的*区别。*
在使用 [junit](https://howtodoinjava.com/junit-4/) 和 Mockito 进行[单元测试](https://howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/)的过程中,我们使用`@Mock``@InjectMock`注解来创建要测试的对象和依赖项。 了解 mockito 中`@Mock``@InjectMock`注解之间的*区别*
## 1\. Mock 对象与 Stub 对象之间的区别
重要的是要了解 Mock 对象与[对象](https://howtodoinjava.com/java/basics/how-to-create-a-class-in-java/)之间的区别。 对象是类的实际实例,使用对象引用调用的任何方法都将执行类文件中定义的方法主体。
重要的是要了解 Mock 对象与[ Stub 对象](https://howtodoinjava.com/java/basics/how-to-create-a-class-in-java/)之间的区别。 对象是类的实际实例,使用对象引用调用的任何方法都将执行类文件中定义的方法主体。
Mock 对象是用于隐藏无法在测试环境中测试的依赖项的接口。 数据库,网络位置等。使用模拟引用调用的方法不会执行类文件中定义的方法主体,而是使用 **when-thenReturn** 方法组合来配置方法行为。
Mock 对象是用于隐藏无法在测试环境中测试的依赖项的接口。 数据库,网络位置等。使用模拟引用调用的方法不会执行类文件中定义的方法主体,而是使用`when-thenReturn`方法组合来配置方法行为。
在 junit 测试中,我们为需要测试的类和要调用的方法创建对象。 我们为依赖项创建了模拟,这些依赖项不会出现在测试环境中,并且对象依赖于该依赖项来完成方法调用。
## 2\. @Mock 和@InjectMock 之间的区别
## 2\. `@Mock`和`@InjectMock`之间的区别
在基于 Mockito 的 junit 测试中, **@Mock 注解创建模拟,而@InjectMock 创建类对象**
在基于 Mockito 的 junit 测试中,**`@Mock`注解创建模拟,而`@InjectMock`创建类对象**
> @Mock –创建模拟
> @InjectMock –创建对象并注入模拟的依赖项
> `@Mock` – 创建模拟
> `@InjectMock` – 创建对象并注入模拟的依赖项
* 使用@InjectMock 创建需要在测试类中进行测试的类实例。
* 当需要为给定类执行实际方法主体时,请使用@InjectMock
* 当我们需要使用 Mock 对象初始化的所有内部依赖项以正常工作方法时,请使用@InjectMock
* 使用@Mock 创建模拟,以支持要测试的类的测试。
* 带有@Mock 注解的带注解的类(待测试)依赖项。
* 我们必须为 Mock 对象定义 when-thenRetrun 方法,在实际测试执行期间将调用哪些类方法。
* 使用`@InjectMock`创建需要在测试类中进行测试的类实例。
* 当需要为给定类执行实际方法主体时,请使用`@InjectMock`
* 当我们需要使用 Mock 对象初始化的所有内部依赖项以正常工作方法时,请使用`@InjectMock`
* 使用`@Mock`创建模拟,以支持要测试的类的测试。
* 带有`@Mock`注解的带注解的类(待测试)依赖项。
* 我们必须为 Mock 对象定义`when-thenRetrun`方法,在实际测试执行期间将调用哪些类方法。
## 3\. @Mock 和@InjectMock 示例
## 3\. `@Mock`和`@InjectMock`示例
让我们通过示例来了解@Mock 和@InjectMock 之间的区别。 在此示例中,我们具有类`MainClass`,其类具有方法 **save()**
让我们通过示例来了解`@Mock``@InjectMock`之间的区别。 在此示例中,我们具有类`MainClass`,其类具有方法`save()`
`MainClass`依赖于`DatabaseDAO``NetworkDAO`。 当我们调用`MainClass.save()`方法时,它在内部调用两个相关对象的保存方法。
......@@ -74,9 +74,9 @@ public class NetworkDAO {
```
#### 3.2 MainClass 的 Junit 测试
#### 3.2 `MainClass`的 Junit 测试
让我们为 MainClass 编写 junit 测试。
让我们为`MainClass`编写 junit 测试。
```java
import static org.junit.Assert.assertEquals;
......@@ -121,11 +121,11 @@ Saved in network in Main class
```
在上面的测试中,将打印用 MainClass.save()方法编写的语句,但不打印从属类。 它证明了方法主体仅针对 MainClass 的 save()方法执行,因为我们使用`@InjectMock`注解创建了 MainClass 的实际对象。 对于依赖类,我们使用了模拟。
在上面的测试中,将打印用`MainClass.save()`方法编写的语句,但不打印从属类。 它证明了方法主体仅针对`MainClass``save()`方法执行,因为我们使用`@InjectMock`注解创建了`MainClass`的实际对象。 对于依赖类,我们使用了模拟。
#### 3.3 验证模拟的方法调用
要验证是否已调用模拟方法,我们必须使用Mock提供的实用程序方法 **verify()**。 它有助于验证在执行实际的测试类方法时是否已执行了模拟方法。
要验证是否已调用模拟方法,我们必须使用 Mock 提供的工具方法`verify()`。 它有助于验证在执行实际的测试类方法时是否已执行了模拟方法。
```java
@Test
......@@ -142,7 +142,7 @@ public void validateTest()
## 4 结论
在此 mockito 教程中,我们了解了@Mock 和@InjectMock 注解之间的*区别。 我们了解了在 junit 测试中将这些注解应用于类时发生了什么。*
在此 mockito 教程中,我们了解了`@Mock``@InjectMock`注解之间的*区别*。 我们了解了在 junit 测试中将这些注解应用于类时发生了什么。
学习愉快!
......
......@@ -40,7 +40,7 @@ AngularJS 中的模型和视图比大多数 JavaScript 客户端框架中的模
## 了解 AngularJS 组件
我们已经知道 AngularJS 是基于 MVC 的结构化框架,因此我们将需要编写许多组件和实用程序以使您的应用代码结构化并得到良好维护。 让我们简短地学习这些组件。 我们将在下一个教程中详细讨论。
我们已经知道 AngularJS 是基于 MVC 的结构化框架,因此我们将需要编写许多组件和工具以使您的应用代码结构化并得到良好维护。 让我们简短地学习这些组件。 我们将在下一个教程中详细讨论。
* #### 模组
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/angularjs/angularjs-services-built-in-and-custom/](https://howtodoinjava.com/angularjs/angularjs-services-built-in-and-custom/)
正如我们在[角度介绍](//howtodoinjava.com/angularjs/angularjs-tutorial-helloworld-example/)中了解到的,服务是**无状态对象和单例对象**,它们为 Web 应用提供功能。 例如,`$http`是用于对 Web 服务器进行 HTTP 调用的核心服务。 简单来说,您可以将角服务假定为可重用代码的**块,它执行一个或多个相关任务(例如 Java 中带有静态方法的实用程序类)。 在 AngularJS 中,有几个内置服务–您也可以创建自己的自定义服务。**
正如我们在[角度介绍](//howtodoinjava.com/angularjs/angularjs-tutorial-helloworld-example/)中了解到的,服务是**无状态对象和单例对象**,它们为 Web 应用提供功能。 例如,`$http`是用于对 Web 服务器进行 HTTP 调用的核心服务。 简单来说,您可以将角服务假定为可重用代码的**块,它执行一个或多个相关任务(例如 Java 中带有静态方法的工具类)。 在 AngularJS 中,有几个内置服务–您也可以创建自己的自定义服务。**
```java
Table of Contents
......@@ -26,7 +26,7 @@ module.controller('DemoController', function( $http ){
| 服务名称 | 描述 |
| `$anchorScroll` | 提供滚动到`$location.hash()`中指定的页面锚点的功能 |
| `$animate` | 该服务公开了一系列 DOM 实用程序方法,这些方法提供对动画挂钩的支持。 |
| `$animate` | 该服务公开了一系列 DOM 工具方法,这些方法提供对动画挂钩的支持。 |
| `$animateCss` | 默认情况下,仅当包含`ngAnimate`时,此服务才会执行动画。 |
| `$cacheFactory` | 构造 Cache 对象,放置和检索键值对并为其提供对其他服务的访问权限的工厂。 |
| `$templateCache` | 首次使用模板时,会将其加载到模板缓存中以便快速检索。 |
......
......@@ -68,7 +68,7 @@ Android bin folder content
.apk 文件是一个 ZIP 存档,其中包含.dex 文件,资源的编译版本,任何未编译的资源(例如,放入 res / raw /的资源)和`AndroidManifest.xml`文件。
如果您构建应用的调试版本-您将`DemoApp-debug.apk``DemoApp-debug-aligned.apk`作为 APK 的两个版本。 后者已使用 [zipalign 实用程序](https://developer.android.com/tools/help/zipalign.html "zipalign")进行了优化,以使其运行更快。
如果您构建应用的调试版本-您将`DemoApp-debug.apk``DemoApp-debug-aligned.apk`作为 APK 的两个版本。 后者已使用 [zipalign 工具](https://developer.android.com/tools/help/zipalign.html "zipalign")进行了优化,以使其运行更快。
这就是这篇小介绍性文章的全部内容,讨论了默认情况下每个 android 应用创建的各种文件和文件夹。 我们将在以后的教程中根据需要更深入地讨论它们。
......
......@@ -93,7 +93,7 @@ MapReduce 论文解决的三个主要问题是并行化,分布和容错。 这
开源 Hadoop 由 Apache 软件基金会维护,网站位置为 [http://hadoop.apache.org/](https://hadoop.apache.org/) 。 当前的 Apache Hadoop 项目(版本 2.7)包括以下模块:
* **Hadoop 通用**:支持其他 Hadoop 模块的通用实用程序
* **Hadoop 通用**:支持其他 Hadoop 模块的通用工具
* **Hadoop 分布式文件系统(HDFS)**:提供对应用数据的高吞吐量访问的分布式文件系统
* **Hadoop YARN:**用于作业调度和集群资源管理的框架
* **Hadoop MapReduce** :基于 YARN 的系统,用于并行处理大型数据集
......
......@@ -109,7 +109,7 @@ public class Log4jChangeWatcherService implements Runnable
## **2)添加`Log4jConfigurator`,这是您的应用与 log4j 一起使用的接口**
此类是一个实用程序类,它将 log4j 初始化代码和重载策略与应用代码分开。
此类是一个工具类,它将 log4j 初始化代码和重载策略与应用代码分开。
**`Log4jConfigurator.java`**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册