English 中文(简体)
在方法学一级(非等级级)对4级测试进行判断。
原标题:Specifying an order to junit 4 tests at the Method level (not class level)

我知道这种做法是坏的,但需要做,或者我需要改用<条码>测试纳克/>。 是否有办法,类似于JUSG 3号测试分析,以具体指明将在某一类别进行测试的顺序?

最佳回答

如果您相信,希望: 也许会有更好的办法,但这是我可以提出来的。

日美特4号有说明:@RunWith,其中请你在你测试时推翻缺席的Runer。

在您的情形下,您希望创设一个特殊子级<代码>。/2005/4Junit4ClassRunner 和上下限compute TestMethods ( ,以便按照你想要执行的命令进行返回测试。 例如,我要说的是,我要按相反的字母顺序进行测试:

public class OrderedRunner extends BlockJUnit4ClassRunner {

    public OrderedRunner(Class klass) throws InitializationError {
        super(klass);
    }

    @Override
    protected List computeTestMethods() {
        List list = super.computeTestMethods();
        List copy = new ArrayList(list);
        Collections.sort(copy, new Comparator() {
            public int compare(FrameworkMethod o1, FrameworkMethod o2) {
                return o2.getName().compareTo(o1.getName());
            }
        });
        return copy;
    }
}
@RunWith(OrderedRunner.class)
public class OrderOfTest {
    @Test public void testA() { System.out.println("A"); }
    @Test public void testC() { System.out.println("C"); }
    @Test public void testB() { System.out.println("B"); }
}

进行这一试验会产生以下结果:

C
B
A

对于你的具体案例,你希望有一个比较机构,按照你想要进行试验的顺序,按姓名对测试进行分类。 (我建议用谷歌瓜瓦语类别Ordering.explicit(“methodName1”、“methodName2”)来界定参照国;。 其中一项职能是将框架标准转换为它的名称......尽管显然你可以自由地执行你想要的任何方式。

问题回答

我可以看到这样做的几个原因,特别是在利用Junnit进行功能测试或测试持久性物体时。 例如,审议一个物体代码<>第,该编码一直保留到某种持久性储存中。 如果我要根据单位测试原则测试<代码>第<条/代码>物体的“所有测试都应重新排序,只测试功能的具体部分”,我将进行三项测试:

  • testInsertArticle()
  • testUpdateArticle()
  • testDeleteArticle()

然而,为了能够测试更新功能,我首先需要插入这一条。 为了测试删除的功能,我还需要插入一条。 因此,在实践中,插入功能已在<编码>测试最新条款()和testDeleteArticle(>上测试。 然后,它只是想建立一种测试方法(, 测试所有功能性(),但最终会产生巨大的方法(它们赢得了>第目标功能的只试部分)。

运行功能测试,例如针对有余的抗体反应器。 如果对测试的定论定得不定,那么日本特尼特对这些案例也是很大的。

尽管如此,我延长了Michael D s OrderedRunner,以使用说明确定测试次序,我应当赞同。 还可以进一步扩大,例如,具体指明每个测试取决于哪些测试,但这是我现在使用的。

这就是如何使用。 它避免了诸如<代码>A_testInsert()、AB_testUpdate(AC_testDelete(、......、ZC_testFilter()等的命名测试。

@RunWith(OrderedRunner.class)
public class SomethingTest {
    @Test
    @Order(order=2)
    public void testUpdateArticle() {
        // test update
    }

    @Test
    @Order(order=1)
    public void testInsertArticle() {
        // test insert
    }

    @Test
    @Order(order=3)
    public void testDeleteArticle() {
        // test delete
    }
}

无论这些测试如何放入档案,都永远作为<条码>{>>>>>第1条,<条码>第2条第2条,第2条>第二和最后一条<条码>,无论你是在Eclipse,使用Ant,还是以任何其他方式从中操作。

执行如下。 首先,说明<编码>。

@Retention(RetentionPolicy.RUNTIME)
public @interface Order {
    public int order();
}

随后,修改后的<代码>OrderedRunner。

public class OrderedRunner extends BlockJUnit4ClassRunner {
    public OrderedRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }

    @Override
    protected List<FrameworkMethod> computeTestMethods() {
        List<FrameworkMethod> copy = new ArrayList<>(super.computeTestMethods());
        Collections.sort(list, new Comparator<FrameworkMethod>() {
            @Override
            public int compare(FrameworkMethod f1, FrameworkMethod f2) {
                Order o1 = f1.getAnnotation(Order.class);
                Order o2 = f2.getAnnotation(Order.class);
        
                if(o1==null && o2 == null) return 0;
                if (o1 == null) return 1;
                if (o2 == null) return -1;

                return o1.order() - o2.order();
            }
        });
        return list;
    }
}

从Junnit版本4.11起,可以通过向您的级别发出@FixMethodOrder,并具体指明任何可提供<代码>MethodSorters,来影响试验执行顺序。 见,该提供更多详情链接。

Joscarsson and Michael D Code in my github repo. 我希望他们不要忘记。 我还为参数分类提供定购版本。 它已经被用作对母性的依赖

<repositories>
    <repository>
        <id>git-xxx</id>
        <url>https://github.com/crsici/OrderedRunnerJunit4.11/raw/master/</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.sici.org.junit</groupId>
    <artifactId>ordered-runner</artifactId>
    <version>0.0.1-RELEASE</version>
</dependency>




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...