小编Wil*_*ill的帖子

EasyMock中的".andReturn(...).anyTimes()"和".andStubReturn(...)"之间有什么区别吗?

这篇文章表明两者之间存在差异(参见用户SnoopyMe的评论),两者可以互换使用.EasyMock文档没有提到任何差异.

实际上或语义上有什么区别吗?如果是这样,何时使用一个而不是另一个更合适?

编辑:

以下测试表明存在差异,至少在与严格模拟一起使用时:

@Test
public void testTestMe() {
    Bar bar = createStrictMock(Bar.class);
    expect(bar.doBar()).andReturn(1).anyTimes();
    expect(bar.doOtherBar()).andReturn(2).once();
    replay(bar);

    Foo foo = new Foo(bar);
    foo.testMe();
    verify(bar);
}

@Test
public void testTestMeAgain() {
    Bar bar = createStrictMock(Bar.class);
    expect(bar.doBar()).andStubReturn(1);
    expect(bar.doOtherBar()).andReturn(2).once();
    replay(bar);

    Foo foo = new Foo(bar);
    foo.testMe();
    verify(bar);
}

public class Foo {
    private final Bar _bar;
    public Foo(Bar bar) {
        _bar = bar;
    }

    public void testMe() {
        _bar.doBar();
        _bar.doOtherBar();
        _bar.doBar();
    }
}
Run Code Online (Sandbox Code Playgroud)

andReturn(...).anyTimes()仍然验证顺序,这是由严格模拟验证强制执行的.然而,andStubReturn(...)没有.

但是,我仍然不清楚这是唯一的区别,或者语义差异是什么.例如,anyTimes()与常规(非严格)模拟的stubReturn()相同吗?

java unit-testing easymock

7
推荐指数
1
解决办法
3434
查看次数

Maven 在构建 Java 项目时运行带有 junit @Ignore 注释的测试

我在方法级别和类级别都使用@Ignore 注释了一个糟糕的测试。通过命令行运行测试时(我试过“mvn clean install”、“mvn test”、“mvn clean install -DskipTests; mvn test”),但是,@Ignore注解被忽略,测试运行,而且——因为这是一个糟糕的测试——它失败了。

这是测试:

public class UserTest extends PersistentTestBase {
    @Test
    @Ignore
    public void testPersistence() {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

...
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

...

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
   ...

    <!-- Testing -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.jmock</groupId>
        <artifactId>jmock-junit4</artifactId>
        <version>2.8.1</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.jmock</groupId>
        <artifactId>jmock-legacy</artifactId>
        <version>2.8.1</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>3.4</version>
        <scope>test</scope>
    </dependency>
...

<!-- For dep management, see …
Run Code Online (Sandbox Code Playgroud)

java testing junit unit-testing maven

5
推荐指数
2
解决办法
2766
查看次数

在 gradle 构建的测试类路径中找不到生成的资源输出

我正在尝试配置一个 gradle(版本 4.6)构建(作为多模块项目的一部分),它使用 Java“脚本”将资源生成到主 sourceSet,然后在我的测试配置中引用。这个想法是我最终想创建一个 jar,它只是一个包含在我构建的另一个模块中的资源包,但我有 java 文件来生成这些资源并在打包之前对它们执行验证测试。

我目前配置了三个 sourceSet:标准的“main”和“test”,以及一个自定义的 sourceSet“generator”,它保存用作生成器“script”输入的资源和生成器脚本本身的源。我已经根据文档注册了一个主输出目录(请参阅“使用生成的资源”),指向一个 JavaExec 类,该类运行带有“生成器”sourceSet 运行时类路径的生成器,以将资源输出到主类路径中。

所有这些似乎都有效 - 我可以在运行时在正确的目录中找到输出:<module>:build,表明脚本运行正常,并且它是作为主编译任务的依赖项完成的。但是,当我尝试使用 引用测试中生成的输出时getClass().getClassLoader().getResource("<baseGeneratedOutputDirectory>"),我得到一个空值,这表明我生成的输出未包含在测试运行时类路径中。该文件明确指出,...

Java 插件将使用这些目录来计算类路径和干扰内容

...所以我不确定为什么我的文件没有被接收。下面是我删节的 build.gradle 文件。请注意,为了使用构建缓存对其进行设置,我覆盖了生成器任务类型,但在缓存关闭时我仍然看到此错误。

apply plugin: 'java-library'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

sourceSets {
    generator {
        java.srcDirs = ['src/generator/java']
        resources.srcDirs = ['src/generator/resources']
    }
    main {
        java
        resources
        output.dir("$buildDir/generated-files/main", builtBy: 'generateConfig')
    }
    test {
        java
        resources
    }
}

dependencies {
    api project(':server:server_protobuf_classes');
    api project(':common:game-config-util')
    api 'com.google.protobuf:protobuf-java:3.5.1'

    generatorImplementation project(':common:game-config-util')
    generatorImplementation project(':server:server_protobuf_classes');
    generatorImplementation group: 'commons-io', name: …
Run Code Online (Sandbox Code Playgroud)

java protocol-buffers gradle

5
推荐指数
0
解决办法
942
查看次数