我需要对这个函数进行单元测试吗?

本文关键字:单元测试 函数 | 更新日期: 2023-09-27 18:05:58

我一直在研究很多关于单元测试的内容,并且我有几个函数,它们的唯一目的是根据来自模型的用户输入在数据库中添加或更新行。从我所读到的内容来看,单元测试似乎并没有真正用于此。集成测试可能更有意义,但我还没有研究过这些。我很抱歉,如果这是覆盖在其他地方,我试图找到一个类似的例子,这个问题是最接近我能找到:https://softwareengineering.stackexchange.com/questions/198453/is-there-a-point-to-unit-tests-that-stub-and-mock-everything-public…这意味着单元测试并不是测试只调用数据库的函数的最佳方法。

下面是一个db函数的例子…

    public void AddDependant(AddDependantView addDependantView, int ID)
    {
        using (var db = new EnrollmentDataModel())
        {
            Dependant dependant = new dependant();
            dependant.ID = ID;
            dependant.FirstName = addDependantView.FirstName;
            dependant.LastName = addDependantView.LastName;
            dependant.Relation = addDependantView.Relation;
            dependant.Birthday = (addDependantView.BirthDate).Value.ToString("MM/dd/yyyy");
            dependant.Active = true;
            dependant.RowCreatedDateTime = DateTime.Now;
            db.Dependant.Add(dependant);
            db.SaveChanges();
            UpdateLog(ID, "Dependant Data Added", "User added their dependant data.");
        }
    }

最后调用的"UpdateLog"函数在结构上与此类似,但在记录任何用户活动的不同数据库中添加了一个条目。

那么这个函数会从单元测试中受益吗?如果可以的话,有什么好处呢?集成测试会是一个更好的选择吗?如果这太基本或太宽泛,我很抱歉,但我对单元测试很陌生,想要进入良好的实践。

我需要对这个函数进行单元测试吗?

最后回答您的问题,该函数从集成测试中获益更多。从单元测试中获得的好处主要是当代码中的某些内容发生变化时通知您。

例如,对于mock/spies/stub,您可以编写测试来断言该函数进行正确的db api调用。这些调用得到正确的参数。然而,这些测试可以作为单元测试通过,如果你的模拟与真实的东西不同步,仍然会在集成测试中失败。

您可以在这里进行单元测试的最好的部分是dependent对象。断言它有一个ID, FirstName, LastName等…然后,如果您的产品代码发生了变化,比如其中一个属性被意外删除了。单元测试可以比集成测试更快地让您了解情况。

这样做的缺点是,你更有可能故意而不是偶然地改变一些东西。这些单元测试可能会变得很烦人,因为每次您更改某些内容时它们都会失败。

所以有好处也有坏处。是否值得为之烦恼取决于你。我想大多数人都会同意,对于像这个函数这样的东西,你真正需要的只是一个集成测试。