小编raf*_*fek的帖子

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

我在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
查看次数

如何掌握正则表达式?

我想提高我的正则表达式知识.你会推荐哪些练习/工具?

regex

31
推荐指数
10
解决办法
9700
查看次数

学习UML的最佳来源是什么?

学习优秀UML设计的好方法是什么?您多久绘制一次图表(除了类的静态图表)?学习它的最佳来源是什么?

uml

30
推荐指数
2
解决办法
4万
查看次数

在ASP.NET MVC中测试HtmlHelpers

有没有办法(单元)测试我自己的HtmlHelpers?如果我想要自定义控件(由HtmlHelper呈现)并且我知道该控件的需求,我怎么能先编写测试 - 然后编写代码?有没有特定的(好的)方法呢?

这值得吗?

.net asp.net-mvc unit-testing html-helper

23
推荐指数
2
解决办法
7212
查看次数

如何在ASP.NET MVC中测试自定义模型绑定器?

我在ASP.NET MVC应用程序中编写了一些自定义模型绑定器(实现IModelBinder).我想知道对它们进行单元测试的好方法(粘合剂)?

asp.net asp.net-mvc unit-testing model-binders

21
推荐指数
2
解决办法
6178
查看次数

你怎么重构?

我想知道其他开发人员如何开始重构.你的第一步是什么?如果你重构不属于你的代码,这个过程(重构)会有什么不同?你在重构时写测试吗?

refactoring unit-testing

19
推荐指数
2
解决办法
1440
查看次数

行选择后,GridView将滚动回顶部

我在ma网站上有一个很长的GridView控件.它允许行选择.问题是,当我向下滚动这个GridView并选择一些底行时,会发生选择,但整个GridView会滚动回顶部.enyone知道如何避免这种情况吗?

asp.net gridview state

14
推荐指数
1
解决办法
2万
查看次数

单元测试,模拟 - 简单案例:服务 - 存储库

考虑以下服务块:

public class ProductService : IProductService {

   private IProductRepository _productRepository;

   // Some initlization stuff

   public Product GetProduct(int id) {
      try {
         return _productRepository.GetProduct(id);
      } catch (Exception e) {
         // log, wrap then throw
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

让我们考虑一个简单的单元测试:

[Test]
public void GetProduct_return_the_same_product_as_getProduct_on_productRepository() {
   var product = EntityGenerator.Product();

   _productRepositoryMock.Setup(pr => pr.GetProduct(product.Id)).Returns(product);

   Product returnedProduct = _productService.GetProduct(product.Id);

   Assert.AreEqual(product, returnedProduct);

   _productRepositoryMock.VerifyAll();
}
Run Code Online (Sandbox Code Playgroud)

起初看起来这个测试还可以.但是让我们改变一下我们的服务方法:

public Product GetProduct(int id) {
   try {
      var product = _productRepository.GetProduct(id);

      product.Owner = "totallyDifferentOwner";

      return product;
   } catch (Exception e) {
      // …
Run Code Online (Sandbox Code Playgroud)

c# service unit-testing mocking repository

12
推荐指数
1
解决办法
3959
查看次数

NHibernate 3分页并确定总行数

我已经阅读了NHibernate 3允许在执行分页查询时(在一个数据库查询中)确定记录总数的某处(不能记住何处和如何).这是正确的吗?

我有这个代码:

public IEnumerable<X> GetOrganisms(int PageSize, int Page, out int total)
{
    var query = (from e in Session.Query<X>() select e).AsQueryable();

    return query.Skip((Page - 1) * PageSize).Take(PageSize).ToList();
}
Run Code Online (Sandbox Code Playgroud)

并希望尽可能有效地初始化"总数".

谢谢.

基督教

PS:

潜在的"解决方案"?:

Total = (int) Session.CreateCriteria<X>()
.SetProjection(Projections.RowCount())
.FutureValue<Int32>().Value;

var query = (from e in Session.Query<X>() select e).AsQueryable();

return query.Skip((Page - 1) * PageSize).Take(PageSize).ToList();
Run Code Online (Sandbox Code Playgroud)

nhibernate

12
推荐指数
1
解决办法
1万
查看次数

打开aspx/ascx文件时,Visual Studio 2008挂起

我问过VS08.我有Web应用程序项目(vb.net).每当我尝试打开一个aspx或ascx时(在Source视图中 - 只需双击解决方案资源管理器)该文件就会打开,但是VS挂起并且没有响应.重新启动VS的唯一方法是杀死它的进程.并且它始终与这些类型的文件一起发生.:/重新安装不起作用.

另外,我用这个VS实例安装的唯一插件是ClearCase源代码控制插件.

visual-studio-2008 visual-studio

10
推荐指数
3
解决办法
8310
查看次数