模拟类,Java

模拟类,Java,java,tomcat,junit,mocking,Java,Tomcat,Junit,Mocking,我是单元测试的初学者 我想测试我的班级。应用程序在Apache Tomcat上运行 课程: MyClass extends Report { public MyClass() { super(); //exception in JUnit } public void doSomething() { GetDataFromSQL(params); // I want to test this } } Report { pu

我是单元测试的初学者

我想测试我的班级。应用程序在Apache Tomcat上运行

课程:

MyClass extends Report {
    public MyClass() {
        super(); //exception in JUnit
    }

    public void doSomething() {
        GetDataFromSQL(params); // I want to test this
    }
}

Report {
    public Report(){
        //this throws null pointer exception in my JUnit tests:
        ServletContext sc = EnviromentWrapper.getServletContext(); 
    }

    //necessary method for MyClass. This method uses also other methods in this class.
    public AnyData GetDataFromSQL(params){} 
}
你们能不能快速解释一下,如何模拟报表?这是一个复杂的类,我想保留GetDataFromSQL方法的原始代码


或者我可以和Tomcat做点什么

将非web工件绑定到web层是个坏主意。

您的报告根本不应该知道servlet上下文


Mock
EnvironmentWrapper#getServletContext()
返回可用的内容和/或Mock
ServletContext
提供所需内容。

我想测试MyClass,而不是Report(不是我的类)@liquide然后使用Mockito、EasyMock等无数模拟库进行模拟报告。您明确表示要保留
GetDataFromSQL
中的“复杂代码”,如果没有进一步的信息很难解释。@DaveNewton-我认为这是一个
静态的
方法。这会使事情稍微复杂一些,您可以使用power mock设置返回值,然后“播放”“他们回来了,但普通的嘲弄是无济于事的。”BrasSpIdId:我猜我认为这是对静态方法的普通嘲弄: