Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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 Junit4/Jmock2中缺少对基类的支持_Java_Junit_Jmock - Fatal编程技术网

Java Junit4/Jmock2中缺少对基类的支持

Java Junit4/Jmock2中缺少对基类的支持,java,junit,jmock,Java,Junit,Jmock,我们最终将单元测试代码库从JUnit3迁移到JUnit4。我们还大量使用JMock2 对于JUnit3,JMock为您的测试提供了一个有用的基类(MockObjectTestCase),它本身也是JUnit的TestCase的子类,它处理与模拟框架有关的各种管理工作。这让测试班的生活变得非常简单 现在对于JUnit4,JMock不提供这种支持。您的测试类必须手动创建mockry对象,它必须记住使用正确的testrunner注释,并且必须将所有与mockry相关的操作委托给mockry。简而言之,

我们最终将单元测试代码库从JUnit3迁移到JUnit4。我们还大量使用JMock2

对于JUnit3,JMock为您的测试提供了一个有用的基类(MockObjectTestCase),它本身也是JUnit的TestCase的子类,它处理与模拟框架有关的各种管理工作。这让测试班的生活变得非常简单

现在对于JUnit4,JMock不提供这种支持。您的测试类必须手动创建mockry对象,它必须记住使用正确的testrunner注释,并且必须将所有与mockry相关的操作委托给mockry。简而言之,与JUnit3测试相比,它赋予测试类更多的责任

现在我明白了JUnit4的魅力之一是不需要对某些东西进行子类化,但这种JMock情况似乎是一种倒退,使得从3移植到4需要做的工作比应该做的更多

我错过什么了吗?有没有一种很好的方法来编写我的JUnit4/Jmock2测试类,而不用手动将所有管道添加到每个类中?当然,我可以编写自己的支持基类,但这似乎是JMock2API中的一个明显遗漏,我不得不怀疑我是否没有抓住要点


编辑:以下是可选支持类的源代码:

@RunWith(JMock.class)
public class JMockSupport {

    protected final Mockery mockery = new Mockery();

    protected void checking(ExpectationBuilder expectations) {
        mockery.checking(expectations);
    }

    protected <T> T mock(Class<T> typeToMock) {
        return mockery.mock(typeToMock);
    }

    protected <T> T mock(Class<T> typeToMock, String name) {
        return mockery.mock(typeToMock, name);
    }

    protected Sequence sequence(String name) {
        return mockery.sequence(name);
    }

    protected void setDefaultResultForType(Class<?> type, Object result) {
        mockery.setDefaultResultForType(type, result);
    }

    protected void setImposteriser(Imposteriser imposteriser) {
        mockery.setImposteriser(imposteriser);
    }

    protected void setNamingScheme(MockObjectNamingScheme namingScheme) {
        mockery.setNamingScheme(namingScheme);
    }

    protected States states(String name) {
        return mockery.states(name);
    }
}
@RunWith(JMock.class)
公共类JMockSupport{
受保护的最终模拟模拟=新模拟();
受保护的无效检查(ExpectationBuilder预期){
嘲弄。检查(期望);
}
受保护的T模拟(类typeToMock){
返回mockry.mock(typeToMock);
}
受保护的T mock(类typeToMock,字符串名称){
返回mockry.mock(typeToMock,name);
}
受保护的序列(字符串名称){
返回mockry.sequence(名称);
}
受保护的void setDefaultResultForType(类类型、对象结果){
mockry.setDefaultResultForType(类型,结果);
}
受保护的void setImposteriser(Imposteriser Imposteriser){
嘲弄。设置冒名顶替者(冒名顶替者);
}
受保护的无效设置命名模式(MockObjectNamingScheme namingScheme){
嘲弄。设置命名模式(命名模式);
}
受保护状态(字符串名称){
返回mockry.states(名称);
}
}

它包含JUnit3 MockObjectTestCase类定义的所有方法,这些方法只响应于mockry。@RunWith注释也存在,以避免忘记将其添加到测试类中。

否。没有此类支持

JMock1中的测试基类导致了很多问题,因为您只能扩展单个类,因此人们无法将JMock与其他也定义了基类的测试框架一起使用。这就是为什么我们在JMock2中使用委托而不是继承

也就是说,只要使用@RunWith(JMock.class)注释类,就可以使用JMock2的JUnit3支持库中的MockObjectTestCase类。但我没有试过


有一个“自动模拟”JUnit4运行程序的请求,它将通过自动反射为您创建上下文和模拟对象。有些人喜欢这样,有些人真的不喜欢。如果您需要此功能,.

否。没有此类支持

JMock1中的测试基类导致了很多问题,因为您只能扩展单个类,因此人们无法将JMock与其他也定义了基类的测试框架一起使用。这就是为什么我们在JMock2中使用委托而不是继承

也就是说,只要使用@RunWith(JMock.class)注释类,就可以使用JMock2的JUnit3支持库中的MockObjectTestCase类。但我没有试过


有一个“自动模拟”JUnit4运行程序的请求,它将通过自动反射为您创建上下文和模拟对象。有些人喜欢这样,有些人真的不喜欢。如果您需要此功能,.

我也完成了此迁移,这是一个痛苦的过程。我可以理解为什么他们将基类机制分为两类——我试图将JMock基类与支持Spring JUnit的基类结合起来,这显然是行不通的


一旦我开始迁移,我发现“优化”的一个方面是创建适当的期望基类,封装模拟对象上的常见操作,而不是为每个测试创建一个新的期望对象(和实例)。这会让你省去一点悲伤。

我也做了这个迁移,这是一种痛苦。我可以理解为什么他们将基类机制分为两类——我试图将JMock基类与支持Spring JUnit的基类结合起来,这显然是行不通的


一旦我开始迁移,我发现“优化”的一个方面是创建适当的期望基类,封装模拟对象上的常见操作,而不是为每个测试创建一个新的期望对象(和实例)。这会帮你省去一点痛苦。

基类也有问题。在以前的版本中,我因尝试组合来自不同测试框架的基类而受苦。这就是为什么我们选择构图而不是继承。看看我们能用新的@Rule结构做些什么会很有趣。

基类也有问题。在以前的版本中,我因尝试组合来自不同测试框架的基类而受苦。这就是为什么我们选择构图而不是继承。看看我们能用新的@Rule结构做些什么会很有趣。

Oh hullo Nat,没想到会在这里找到你:)我已经修改了我的问题,将建议基类的来源包括在内。请注意,这是完全可选的,但确实让生活变得简单了一点。哦,hullo Nat,没想到会在这里找到你:)我修改了我的问题,将建议基类的源代码包括在内。