- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我遇到了 Mockito junit 测试的问题。我是新手,对我面临的问题有点困惑。如有任何帮助,我们将不胜感激。
class Activity{
public void firstMethod(){
String str = secondMethod();
}
public String secondMethod(){
String str = null;
/* some Code */
return str;
}
}
获取异常:
*org.mockito.exceptions.misusing.NotAMockException:
Argument passed to when() is not a mock!*
在下面的代码中
class ActivityTest(){
Activity act;
@Before
public void setup(){
act = new Activity();
}
@Test
public void testFirstMethod(){
Mockito.doReturn(Mockito.anyString()).when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
我知道 Activity 不是模拟,但我不确定是否有解决方法,因为 secondMethod()
是同一类中的一个方法。我需要为 secondMethod()
编写规则,因为我已经完成了它的单元测试。 secondMethod()
的定义包含外部依赖性。我应该模拟 secondMethod()
中存在的外部依赖项并为它们编写规则而不是为 secondMethod()
编写规则吗?
我找到这篇文章: Mockito Spy'ing on the object being unit tested然而,将 secondMethod() 分离到不同的类中是没有意义的。我的方法与这个类有关。为测试创建一个不同的类对我来说似乎不合适。即使使用 spy() 模拟实际类也不是最正确的方法,正如帖子中已经解释的那样。
我认为我不应该创建 Activity 类的模拟,因为这是我正在测试的类。我真的很感激对此的帮助和见解。
最佳答案
如您所述,act
不是模拟,因此您无法记录其行为。你可以使用 Mockito.spy
好吧,监视(或部分模拟)act
对象,以便您只记录 secondMethod
的行为并执行 firstMethod
的实际代码.
但是请注意,无论您如何模拟
或监视
您的匹配器,都不能在 doReturn
调用中使用目的。返回值必须是具体对象。
class ActivityTest() {
Activity act;
@Before
public void setup(){
act = Mockito.spy(new Activity()); // Here!
}
@Test
public void testFirstMethod(){
Mockito.doReturn("someString").when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
稍微更优雅的语法允许您使用注释而不是显式调用 Mockito.spy
,但这确实是一个品味问题:
@RunWith(MockitoJUnitRunner.class)
class ActivityTest() {
@Spy
Activity act = new Activity();
@Test
public void testFirstMethod(){
Mockito.doReturn("someString").when(act).secondMethod();
act.firstMethod();
verify(act).secondMethod();
}
}
关于java - Mockito NotaMockException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29611893/
我正在尝试在单元测试中验证在特定配置中未调用静态方法。 因此,我正在使用 PowerMock ( powermock-core:2.0.4 & powermock-module-junit4:2.0.
我遇到了 Mockito junit 测试的问题。我是新手,对我面临的问题有点困惑。如有任何帮助,我们将不胜感激。 class Activity{ public void firstMetho
我正在尝试为以下静态方法编写测试: public static Field getField (Class type, String fieldName) { for (Field field
有点复杂的设置。 Robolectric,PowerMockito 基于规则的配置。 @RunWith(RobolectricGradleTestRunner.class) @Config(const
我正在尝试模拟Calendar.getInstance()以进行单元测试。 因此,我使用 PowerMock (powermock-core:2.0.4 & powermock-module-juni
我试过下面几行 @Test public void getXYZ_Success() throws Exception { Response result=abc.XYZ(exampleHe
我正在尝试一起使用两种 Mockito 模式: 对于部分模拟,请使用 Mockito.spy。 对于返回 void 的模拟方法,请使用 Mockito.doXXX(...).when(mock).me
我在 Mockito junit 测试中遇到问题。我是新手,对问题有点困惑。对此的任何帮助将不胜感激。 这些是我打算写的类(class) public class B extends QuartzJo
对于以下 Kotlin 类: class ProductLogic( private val product: Product? ) { fun shouldShow(): B
我正在尝试模拟方法的返回值,但我得到了 NotAMockException。 @InjectMocks private MyService myService; @Mock private Other
我正在使用Mockito模拟单元测试用例,并且正在获取以下异常(exception) org.mockito.exceptions.misusing.NotAMockException: Argume
大家好, 我正在尝试在使用 spring mvc 的 Web 应用程序上使用 mockito 进行测试。当它执行这一行 "Mockito.reset(notificacaORepositoryMock
我正在研究 Android 和 PowerMock 项目。在这个例子中,我试图模拟下面的方法,但我得到了错误 org.mockito.exceptions.misusing.NotAMockExcep
我是一名优秀的程序员,十分优秀!