当前位置: 首页 > 知识库问答 >
问题:

单元测试方法的有效输入

鲁滨海
2023-03-14

问题是,在您的应用程序项目中拥有一个除了为您的测试项目生成数据之外没有其他目的的方法是否是一种糟糕的做法。

public void SomeUnitTest()
{
    Availability Availability = new Availability();

    List<TestParam> paramList = new List<TestParam>();
    bool success = true;
    bool expected = true;

    //This method pulls every valid param from my database.
    paramList = Availability.TestMethod();

    //This foreach loop runs each one of those valid params through another method. If there is an error, 
    //success is set to false otherwise it remains true.
    foreach (TestParam s in paramList)
    {
        try
        {
            InputWrapper Wrapper = new InputWrapper();
            Wrapper.ApplicationName = s.APPname;
            Wrapper.Location = s.APPLocation;
            Availability.CheckAvailability(Wrapper);  
        }         
        catch(Exception)
        {
            success = false;
        }

        //I then assert that success remains true. If it is false, it means that
        //the method failed.
        Assert.AreEqual(expected, success);    
    }
} 

共有1个答案

百里弘致
2023-03-14

您似乎认为测试的数据源是一个有问题的东西。

首先,我要说的是,情况完全不是这样,但是,(总是有一个but)您应该记住,一个好的单元测试是非常容易编写的(而且--也许更重要的是--阅读),所以在理想情况下,您的单元测试中应该有尽可能少的层。

这就给您带来了一个困境:我是确保任何阅读我的测试的人都可以仅仅查看测试方法并了解将要投入运行的所有内容,还是我添加了一些层来保持测试干净,但也增加了复杂性?

就像很多事情的情况一样:你将不得不妥协。我认为您可以在单元测试中增加2层或3层的复杂性,但绝对不应该超过这一层。

在您的示例中,这将意味着我们可以通过提取测试数据来增加一层复杂性,使其与实际测试分离。
这对理解测试不会有太大的负担,但它将使编写和维护测试变得很清楚。

您的问题的另一个方面引起了一些眉毛:您是在谈论将测试数据放在数据库中。

这不是你的生产数据库吧?如果是:停止针对活动数据的测试。您需要对测试进行绝对的控制,以确保没有测试数据被更改,并且环境不会在您不知道的情况下发生更改(除了实际生产数据的潜在中断)。

也不需要使用布尔变量:抛出的异常将自动导致错误测试。

我将在这里和这里更详细地介绍这些事情,请通读它们,并随时提出任何后续问题。

 类似资料:
  • 为什么在STS中运行单元测试是有效的,而在bash中运行mvn测试会产生错误。Groovy库位于类路径中。我也很好奇mvn测试与spock测试有何不同。mvn测试不能拿起斯波克测试吗? pom.xml

  • 问题内容: 我有以前具有大量方法的类,因此我将此方法的工作细分为“辅助”方法。 这些辅助方法声明为强制执行封装- 但是我想对大型公共方法进行单元测试。是否也可以对辅助方法进行单元测试,好象其中的一个失败,而调用它的公共方法也会失败,这样我们就可以确定为什么失败了? 另外,为了使用模拟对象测试这些对象,我需要将其可见性从私有更改为受保护,这是否可取? 问题答案: 一种方法是省略测试并将其放在同一程序

  • 测试失败,因为为。为什么不以阻塞的方式在ViewModel中运行块? 我知道,如果将其转换为返回对象的方法,则可以通过调用获取对象,或者可以返回并调用。但是,我想通过将我的ViewModel方法保留为函数来实现这一点,有没有办法做到这一点呢?

  • 测试方法: 测试用例:

  • 本文向大家介绍详解.Net单元测试方法,包括了详解.Net单元测试方法的使用技巧和注意事项,需要的朋友参考一下 1、测试异常 可以直接对方法进行异常测试,也可以对模拟对象进行异常测试,但是,对模拟对象进行异常测试,很少用,所以,这里就介绍对方法的异常测试。请看如下代码,当用户名为空的时候,抛出异常。 例如 测试代码如下 2、测试返回值 这里用到了一个LastCall的一个类,比较常用,一些辅助测试

  • 问题内容: 阅读并学习单元测试,尝试理解下面的文章,该文章解释了静态函数调用的困难。 我不清楚这个问题。我一直认为静态函数是在类中舍入实用函数的一种好方法。例如,我经常使用静态函数调用进行初始化,即: //阅读这篇文章后,我现在的目标是… 但是,我为此课程编写的几十个测试是相同的。我什么都没改变,他们仍然都过去了。难道我做错了什么? 该帖子的作者指出: 静态方法的基本问题是它们是过程代码。 我不知