Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模仿例外_Java_Unit Testing_Mockito_Junit4 - Fatal编程技术网

Java 模仿例外

Java 模仿例外,java,unit-testing,mockito,junit4,Java,Unit Testing,Mockito,Junit4,我在模拟方法(使用mockito)时遇到一些问题,该方法根据输入参数返回字符串或异常 单元测试的代码似乎是错误的,但即使问过谷歌,我也找不到解决方案 谢谢你的帮助 public class MyClassTest { public MyClass mc; public ClassUnknown cu; @Before public void setUp() { mc = new MyClass(); cu = mock(C

我在模拟方法(使用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 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
的实例上调用
main方法()。此方法创建另一个
ClassUnknown
实例并使用它。因此,
ClassUnknown
的模拟实例从未在此处使用过,也从未参与测试

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


这就是所谓的依赖注入。拥有可测试的代码至关重要
MyClass
取决于
ClassUnknown
。所以MyClass不会创建自己的依赖项。相反,您将依赖项(即
ClassUnknown
)注入
MyClass

谢谢。我添加以向SetUp()中添加一个抛出异常,否则IDE会将该类标记为错误,但不会起作用。是否确实需要将抛出添加到SetUp()中?
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());
        }

    }

}
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.        
}