Mockito.mock(SomeClass)和@Mock注释有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mockito.mock(SomeClass)和@Mock注释有什么区别?相关的知识,希望对你有一定的参考价值。
Mockito.mock(Class<T> classToMock)
方法和@Mock
注释有什么区别?它们是一样的吗?
例如,是这样的:
private TestClass test = Mockito.mock(TestClass.class);
同样如下:
@Mock
private TestClass test;
它们都达到了相同的效果。使用注释(@Mock
)通常被认为是“更干净”,因为您没有使用看起来相同的样板分配来填充代码。
请注意,为了使用@Mock
注释,您的测试类应使用@RunWith(MockitoJUnitRunner.class)
注释或在其MockitoAnnotations.initMocks(this)
方法中包含对@Before
的调用。
区别在于您需要编写的代码行:) :) :)
但严重的是,使用注释与使用Mockito.mock具有完全相同的效果。
引用MockitoAnnotations
的文档时,注释的使用具有以下好处:
- 允许速记创建测试所需的对象。
- 最小化重复的模拟创建代码。
- 使测试类更具可读性。
- 由于字段名称为,因此更容易阅读验证错误 用于识别模拟。
MockitoAnnotations
的javadoc是here
它们都被认为是相同的并且达到了同样的目的但我更喜欢第二个:
@Mock是一个注释:
- 最小化重复的模拟创建代码。
- 使测试类更具可读性。
- 允许速记创建测试所需的对象。
使用注释有两个显着的优点。
- 使用
@Mock
注释可以将使用@InjectMocks
创建的模拟注入到您正在测试的类中。这是一种强大的技术,可以使测试变得更加容易。它只适用于mock
方法创建的模拟。 - 如果您有任何涉及模拟的错误,模拟的名称将显示在消息中。如果您使用过
@Mock
,则此名称将只是该字段的名称。这使得很容易找到问题模拟。
当然,除了这两个重要的优点外,大多数人发现@Mock
表示法更具可读性,并且它确实减少了代码量。我认为没有理由不使用它。
这个问题的答案是一个大错误。我们刚刚解决了Mockito.mock(Your.class)引起的一些问题。我们的@Test方法很少。第四种方法是使用'thenThrow(ex)'抛出异常。它失败后的所有@Test方法,原因是抛出异常。他们分享了模拟实例和'何时'条件。我们改变之后
TestClass testInstance = Mockito.mock(TestClass.class);
至
@Mock
TestClass testInstance;
一切都开始按预期工作。所以Mockito.mock正在测试方法之间创建共享模拟,而@Mock则不然。
以上是关于Mockito.mock(SomeClass)和@Mock注释有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章