标签: test-first

你如何对单元测试进行单元测试?

我在MVCStoreFront应用程序上观看Rob Connerys的网络广播,我注意到他甚至是最普通的东西,例如:

public Decimal DiscountPrice
{
   get
   {
       return this.Price - this.Discount;
   }
}
Run Code Online (Sandbox Code Playgroud)

会有一个测试像:

[TestMethod]
public void Test_DiscountPrice
{
    Product p = new Product();
    p.Price = 100;
    p.Discount = 20;
    Assert.IsEqual(p.DiscountPrice,80);
}
Run Code Online (Sandbox Code Playgroud)

虽然,我都是单元测试,但我有时想知道这种形式的测试首次开发是否真的有益,例如,在实际过程中,您的代码上方有3-4层(业务请求,需求文档,架构文档) ,实际定义的业务规则(折扣价格是价格 - 折扣)可能被错误定义.

如果是这种情况,您的单元测试对您来说毫无意义.

此外,您的单元测试是另一个失败点:

[TestMethod]
public void Test_DiscountPrice
{
    Product p = new Product();
    p.Price = 100;
    p.Discount = 20;
    Assert.IsEqual(p.DiscountPrice,90);
}
Run Code Online (Sandbox Code Playgroud)

现在测试存在缺陷.显然,在一个简单的测试中,这没什么大不了的,但是我们说我们正在测试一个复杂的业务规则.我们在这里获得了什么?

快速推进应用程序生命的两年,当维护开发人员维护它时.现在业务改变了规则,测试再次中断,一些菜鸟开发人员然后错误地修复了测试......我们现在又有了另一个失败点.

我所看到的只是更多可能的失败点,没有真正有益的回报,如果折扣价格错误,测试团队仍然会发现问题,单元测试如何保存任何工作?

我在这里错过了什么?请教我爱TDD,因为到目前为止我很难接受TDD.我也想要,因为我想保持进步,但这对我来说没有意义.

编辑:有几个人一直提到测试有助于执行规范.根据我的经验,规范也是错误的,通常是错误的,但也许我注定要在一个组织中工作,这些组织的规范是由那些不应该编写规范的人编写的.

tdd agile test-first

89
推荐指数
9
解决办法
4444
查看次数

TDD和测试优先开发(或测试优先编程)之间有区别吗?

这两个想法听起来与我非常相似,但可能存在微妙的差异或完全相同的事情,以不同的方式解释.TDD与测试第一开发/编程之间有什么关系?

testing tdd testing-strategies test-first

53
推荐指数
5
解决办法
2万
查看次数

SQL Server 2005的测试优先开发工具?

几年来,我一直在使用一种名为qmTest的测试工具,它允许我为一些Firebird数据库进行测试驱动的数据库开发.我为一个新功能(表,触发器,存储过程等)编写测试,直到它失败,然后修改数据库直到测试通过.如果有必要,我会在测试上做更多工作,直到它再次失败,然后修改数据库直到测试通过.一旦完成对该功能的测试并且100%的时间通过,我将其保存在数据库的一系列其他测试中.在继续进行另一个测试或部署之前,我将所有测试作为套件运行,以确保没有任何损坏.测试可以依赖于其他测试,结果将记录并显示在浏览器中.

我相信,这里没什么新鲜事.

我们的商店旨在标准化MSSQLServer,我想使用相同的程序来开发我们的数据库.有没有人知道允许或鼓励这种开发的工具?我相信团队系统确实如此,但我们目前并不拥有它,并且可能不会持续一段时间.

我并不反对编写脚本,但欢迎使用更加图形化的环境.

有什么建议?

sql-server tdd sql-server-2005 test-first

6
推荐指数
1
解决办法
209
查看次数

理解"测试优先"和"测试驱动"之间的区别

我过去曾经谈过这个话题,我想我可能知道答案,但我还是没能说清楚.

这是我认为我知道的:

我怀疑你是测试优先而不是测试驱动,如果你在编写测试之前已经掌握了事情将如何工作的想法,所以你先编写测试,然后在实现你的想法之前测试你的想法.即你对实现的想法是第一位的,并推动测试的样子.

如果您是测试驱动的,那么您正试图通过测试来推动实现的样子.您为自己想要的某些行为编写了一个测试,而不是对实现的先入为主的想法,因此您必须在"重构"阶段提出一个实现才能很好地通过测试.

我的问题是:

  1. 我理解正确吗?
  2. 如果大多数开发人员在他们甚至伸手去拿键盘之前立即开始在他们的脑海中开始探索解决方案,那么如何从测试第一的思维模式进入测试驱动的思维模式?

tdd unit-testing test-first

6
推荐指数
1
解决办法
599
查看次数

测试写作策略建议

所以,我现在越来越多地被测试驱动的开发所吞噬,而且我在考虑tdd时编写的代码越多,看起来就越多,我必须考虑我应该编写的测试范围.我想就我应该为自己的项目编写多少单元测试设置一个个人策略,并且想知道我是否会得到一些关于你如何接近你的方法的建议.

这是我目前面临的一个决定的例子......

我有三节课......

public class User
{
    public string Username { get; set; }
    public List<Favorite> Favorties { get; set; }
}

public class Favorite
{
    public string Username { get; set; }
    public int rank { get; set; }
}

public class UserManager
{
    public List<Favorite> GetTop5(User user)
    {
        var qry = from fav in user.Favorties.OrderBy(f => f.rank)
                  select fav;

        return qry.Take<Favorite>(5).ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个User类的数据访问层,我已经有了一个"GetUser"测试设置.正如您所看到的,在我的业务逻辑中,我有一个方法UserManager.GetTop5(),它返回我刚从数据库中取出的用户的前5个收藏夹.此方法非常简单,目前不涉及任何外部资源或依赖项.

所以我的问题是你会继续为这个"GetTop5"功能点编写另一个测试,即使失败的可能性很小吗?

如果您将来扩展功能,您是否设置了测试?或者你认为这里的测试是否过度?

c# tdd unit-testing test-first

4
推荐指数
1
解决办法
284
查看次数

SQL Server中存储过程的单元测试

我想在一个只使用SQL Server中的存储过程和函数实现的项目中实现Test First Development.

有一种方法可以简化存储过程和函数的单元测试的实现吗?如果没有,创建这些单元测试的最佳策略是什么?

sql sql-server unit-testing stored-procedures test-first

4
推荐指数
1
解决办法
4106
查看次数

开始一个新项目 - 我从哪里开始?

我将开始一个我自己的项目,它将是ASP.NET MVC + Fluent NHibernate.我想尽可能多地使用测试优先方法.那么,我从哪里开始呢?数据库架构?领域模型?将域模型类映射到数据库?

asp.net-mvc unit-testing test-first

3
推荐指数
1
解决办法
293
查看次数