gpt4 book ai didi

java - 我应该出于什么原因 mock ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:49 26 4
gpt4 key购买 nike

我也是 Mockito 和 PowerMockito 的新手。我发现我无法使用纯 Mockito 测试静态方法,所以我需要使用 PowerMockito(对吗?)。

我有一个名为 Validate 的非常简单的类,使用这个非常简单的方法

public class Validate {
public final static void stateNotNull(
final Object object,
final String message) {
if (message == null) {
throw new IllegalArgumentException("Exception message is a null object!");
}
if (object == null) {
throw new IllegalStateException(message);
}
}

所以我需要验证:

1) 当我在空消息参数上调用该静态方法时,会调用 IllegalArgumentException
2) 当我在 null 对象参数上调用该静态方法时,会调用 IllegalStateException

根据目前的情况,我编写了这个测试:

import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.isNull;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.testng.annotations.Test;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Validate.class)
public class ValidateTestCase {

@Test(expectedExceptions = { IllegalStateException.class })
public void stateNotNullTest() throws Exception {
PowerMockito.mockStatic(Validate.class);
Validate mock = PowerMockito.mock(Validate.class);
PowerMockito.doThrow(new IllegalStateException())
.when(mock)
.stateNotNull(isNull(), anyString());
Validate.stateNotNull(null, null);
}
}

所以这表示我模拟了 Validate 类,并且我正在检查当 mock 以 null 参数作为对象并以任何字符串作为消息调用该方法时,抛出 IllegalStateException。

现在,我真的不明白。为什么我不能直接调用该方法,而放弃围绕模拟该静态类的整个巫毒魔法?在我看来,除非我调用 Validate.stateNotNull 否则测试无论如何都会通过......我应该模拟它的原因是什么?

最佳答案

您不应该模拟您正在测试的类和方法。您应该只模拟执行测试本身所需的方法。

例如,如果您需要来自 Web 服务的一些对象来执行测试,您可以模拟 Web 服务调用,这样您就不需要实际调用 Web 服务。

关于java - 我应该出于什么原因 mock ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15160379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com