我是否需要对此功能进行单元测试?

时间:2016-09-06 15:12:07

标签: c# linq unit-testing asp.net-mvc-5 integration-testing

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

这是我们的一个数据库函数的例子......

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

这个功能会从单元测试中受益吗?如果它有什么好处呢?集成测试会更好吗?我很抱歉,如果这太基础或太宽泛,但我对单元测试很陌生,并希望进入良好实践。

1 个答案:

答案 0 :(得分:4)

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

例如,使用模拟/间谍/存根,您可以编写测试来断言此函数进行正确的db api调用。那些调用得到了正确的论点。但是,如果你的模拟与真实的模拟不同步,这些测试可能会作为单元测试通过,但仍然无法进行集成测试。

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

这里的缺点是你更有可能故意改变一些意外事故。这些单元测试可能会变得烦人,因为每次更改时它们都会失败。

所以有利有弊。这个好处是否值得给您带来麻烦取决于您。我想大多数人都会同意,对于类似这个功能的东西,你需要进行集成测试。