gpt4 book ai didi

java - 模拟异常

转载 作者:行者123 更新时间:2023-12-02 05:26:12 25 4
gpt4 key购买 nike

我在模拟方法(使用mockito)时遇到一些问题,该方法根据输入参数返回字符串或异常。

单元测试的代码似乎是错误的,但即使在询问谷歌后我也找不到解决方案。

感谢您的帮助

public class MyClassTest
{
public MyClass mc;
public ClassUnknown cu;

@Before
public void setUp()
{
mc = new MyClass();
cu = mock(ClassUnknown.class);
// The next two lines seems to be wrong
when(cu.methodUnknown("hello")).thenReturn("hello there");
when(cu.methodUnknown("???")).thenThrow(new Exception("don't know"));
}

@Test
public void testMain()
{

mc.mainMethod("hello");
.....;
}
}

这是“classUnknown”:

public class ClassUnknown
{
public String methodUnknown(String s) throws Exception
{
// The real logic is much more complex and does some CRUD operations
if (s.equals("Hello"))
{
return "Hello there";
}
throw new Exception("don't know");
}
}

以及要测试的类:

public class MyClass
{

public void mainMethod(String s)
{
ClassUnknown cu = new ClassUnknown();

try
{
String methodUnknown = cu.methodUnknown(s);
System.out.println(methodUnknown);
} catch (Exception ex)
{
System.out.println(ex.getMessage());
}

}

}

最佳答案

您正在创建 MyClass 的实例。然后您将创建 ClassUnknown 的模拟实例。然后,您在 MyClass 实例上调用 mainMethod()。此方法创建 ClassUnknown另一个实例并使用它。因此,ClassUnknown 的模拟实例从未在任何地方使用,也从未参与测试。

您需要做的是将 ClassUnknown 的模拟实例传递给您正在测试的 MyClass 实例(或您正在测试的方法):

public class MyClass {

private ClassUnknown cu;

public MyClass(ClassUnknown cu) {
this.cu = cu;
}

public void mainMethod(String s) {
try {
String methodUnknown = cu.methodUnknown(s);
System.out.println(methodUnknown);
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}

...

@Before
public void setUp() {
cu = mock(ClassUnknown.class);
// The next two lines seems to be wrong
when(cu.methodUnknown("hello")).thenReturn("hello there");
when(cu.methodUnknown("???")).thenThrow(new Exception("don't know"));

mc = new MyClass(cu); // Now, the MyClass instance will use the mock.
}

这称为依赖注入(inject)。拥有可测试的代码至关重要。 MyClass 依赖于 ClassUnknown。所以 MyClass 不会创建自己的依赖项。相反,您可以在 MyClass 中注入(inject)依赖项(即 ClassUnknown 的实例)。

关于java - 模拟异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25988243/

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