当前位置: 首页 > 面试题库 >

使用JUnit类别而不是简单地在单独的类中组织测试

高和通
2023-03-14
问题内容

我有两种逻辑上的测试类别:普通功能单元测试(通过/失败)和仅用于度量/诊断的基准性能测试。

目前,我将所有测试方法都放在一个类中,称为MyTests

public class MyTests 
{
    @Test
    public void testUnit1()
    {
        ...

        assertTrue(someBool);
    }

    @Test
    public void testUnit2()
    {
        ...

        assertFalse(someBool);
    }

    @Test
    @Category(PerformanceTest.class)
    public void bmrkPerfTest1()
    {
        ...
    }

    @Test
    @Category(PerformanceTest.class)
    public void bmrkPerfTest2()
    {
        ...
    }
}

然后我有一个UnitTestSuite定义为

@RunWith(Categories.class)
@Categories.ExcludeCategory(PerformanceTest.class)
@SuiteClasses({ MyTests.class })
public class UnitTestSuite {}

和一个 PerformanceTestSuite

@RunWith(Categories.class)
@Categories.IncludeCategory(PerformanceTest.class)
@SuiteClasses({ MyTests.class })
public class PerformanceTestSuite {}

这样我就可以将单元测试Ant与性能测试分开运行(我认为没有必要包含Ant代码)。

这意味着我总共有四个类(MyTests,PerformanceTest,PerformanceTestSuite和UnitTestSuite)。我意识到我可以将所有单元测试放在一个类中,将基准测试放在另一个类中,并用它来完成,而不必增加类别和额外注释的复杂性。我在Ant中按类名称调用测试,即不要在包中运行所有测试。

这样做有意义吗?将其按类别进行分类并加上注释的原因是什么?或者如果我仅在两个简单的测试类中对其进行重构会更好吗?


问题答案:

关于是否将测试分为两类的问题:

由于它们显然是 非常不同的测试类型 (单元测试和性能测试),因此,无论出于哪种原因,我都会将它们放在不同的类中。

一些进一步的思考:

我认为使用@Category注释并不是一个坏主意。在一个具有数十个或数百个包含测试的类的更典型的项目中,我要做的是使用注释测试
(而不是方法)@Category,然后使用ClassPathSuite库来避免重复进行测试分类的工作

如果您只有两个测试类,那么它当然没什么大不了的。您可以保留类别和套件,也可以将其丢弃(如您所说的,这些html" target="_blank">测试是在Ant中按类别名称运行的),如果您遇到其他类别的错误。我会保留它们,并朝着上述场景前进,因为通常(在一个健康的项目中)随着时间的推移会积累更多的测试。:-)



 类似资料:
  • 问题内容: 我有单独的类来处理鼠标侦听器。但是当我在另一个类中使用它时,它不起作用,并且我还不知道如何解决这个问题。这是我的Handler类: DrawingCanvas类: StatusBar类: 和MouseEventGUI类: 当我运行该程序时,在状态栏中显示“未监听鼠标”(请参见MouseEventGUI类),希望它在画布中移动时显示鼠标光标的坐标。 [更新] 如果在同一个类中,则 可以

  • 我尝试使用另一个类中的OnClickListener,但不知为什么它会给我抛出一个错误。有人能帮我解决这个问题吗? 主要活动的一部分: 错误: java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.user.project/com.example.user.project.MainActivity}:java.lang.

  • 问题内容: 我目前正在针对我的代码重用另一个项目中的JUnit 4测试。我可以从其他项目的资源库中直接获取它们,这是我的自动化Ant构建的一部分。这很棒,因为它可以确保我的代码相对于最新版本的测试保持绿色。 但是,有一些测试子集我从未期望通过我的代码。但是,如果我开始在这些测试中添加@Ignore批注,则必须维护我自己的测试实现的单独副本,而我 真的 不想这样做。 有没有办法在不修改测试源的情况下

  • 我见过许多在主类中编写AnimationTimer和KeyListener的示例,但在另一个类中没有看到。 我尝试过如何在“VolleyController”中为JavaFX编写一个KeyListener,但我不知道为什么它不起作用。 首先,我使用KeyEvent移动图像,就像第一个代码一样。第三个代码是我的主类。我想重写这些方法来移动图像,就像第二个代码一样。 但是我遇到了第二个代码中写的一些错

  • 我想问一下你的知识。一个Spring启动应用程序包含各种映射器。这些应该进行测试。要测试映射器,应该读取一个JSON文件。这个JSON文件加载在每个测试文件中。到目前为止,该功能已在每个测试类中实现,我想将功能外包给一个助手类。我尝试如下: 在测试类中,我调用助手如下: 很遗憾,我收到以下错误消息: 组织。springframework。豆。工厂UnsatifiedDependencyExcept

  • 但是当我使用聚合器设置依赖项时,测试会正常执行。 那么这两者之间有什么区别呢?