Mockito.mock(SomeClass)和@Mock注释有什么区别?

Gáb*_*kós 53 java junit unit-testing mocking mockito

Mockito.mock(Class<T> classToMock)方法和@Mock注释有什么区别?它们是一样的吗?

例如,是这样的:

private TestClass test = Mockito.mock(TestClass.class);
Run Code Online (Sandbox Code Playgroud)

同样如下:

@Mock
private TestClass test;
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 63

它们都达到了相同的效果.使用注释(@Mock)通常被认为是"更干净",因为您没有使用样板分配来填充代码,这些分配看起来都相同.

请注意,为了使用@Mock注释,您的测试类应在其方法中注释@RunWith(MockitoJUnitRunner.class)或包含对其的调用.MockitoAnnotations.initMocks(this)@Before

  • 不要忘记@InjectMocks (3认同)

geo*_*and 8

区别在于您需要编写的代码行:) :) :)

但严重的是,使用注释与使用Mockito.mock具有完全相同的效果.

引用MockitoAnnotations注释使用的文档具有以下好处:

  • 允许速记创建测试所需的对象.

  • 最小化重复的模拟创建代码.

  • 使测试类更具可读性.

  • 使验证错误更容易阅读,因为字段名称
    用于标识模拟.

javadoc MockitoAnnotations在这里

  • @RogerCSWernersson - 您可以将注释放在同一行,注释不需要以下换行符. (2认同)

小智 6

它们都被认为是相同的并且实现了相同的目标,但我更喜欢第二个:

@Mock 是一个注释,它:

  • 最大限度地减少重复的模拟创建代码。
  • 使测试类更具可读性。
  • 允许快速创建测试所需的对象。


Daw*_*ica 6

使用注释有两个显着的优点。

  • @Mock可以使用@InjectMocks注释将创建的模拟注入到您正在测试的类中。这是一种强大的技术,可以显着简化测试。它只是不适用于该mock方法创建的模拟。
  • 如果您的模拟有任何错误,则模拟的名称将出现在消息中。如果您使用了@Mock,则此名称将只是该字段的名称。这使得很容易找到问题模拟。

当然,除了这两个重要的优点之外,大多数人发现这种@Mock表示法更具可读性,并且确实减少了代码量。我认为没有理由不使用它。