返回首页

一,引言
烘箱实验范围适配器实施提供了一个:

typedef

    any_range<int, boost::single_pass_traversal_tag>

range;



range sieve(range rng)

{

    return rng|dropped(1)|filtered(regular(lambda::_1 % front(rng) != 0));

}



range primes

    = iteration(range(counting_from(2)), &::sieve)|transformed(front);



int main()

{

    std::cout << (primes|taken(200));

}


的所有类型和函数定义在命名空间pstade::LT烤箱; pstade / oven.hppgt;除非另有规定。| mb2sync

回答

评论会员:游客 时间:2011/12/06
您好布雷特​​,我一直在阅读了很多有关使用NUnit的单元测试应用程序我目前的情况是:我通过与开发基于Web的应用程序使用VisualStudio2005和Oracle10g。在此之后,我想创建通过NUnit的"测试",以检查我的应用程序的三个层次,即业务逻辑,数据库和用户界面。我的理解NUnit测试框架下工作的基本思路,但我现在的问题是"要测试什么"和"什么不能测试"。如果一开始写作,我在我的BLL定义的所有方法的测试,那么我可能使数据库调用以及运行我的测试[PS:我认为嘲讽数据库的想法。可能需要更多的关于这一点!]这将最终使本身就是一个很笨重的类太多断言等功能。光根据上述情况,可以请你的任何一个建议几个指针,以回答我的问题。任何有关这方面的帮助表示高度赞赏。Kuldeep
布雷特丹尼尔
评论会员:游客 时间:2011/12/06
本文主要是测试关注的对象-关系映射是健全的。测试的业务逻辑是正确的,是另一回事,但像你观察,它可能取决于数据库。我猜测,充分测试你的BLL,你几乎肯定会要求数据库调用,但最好是尽量减少数据库的交互。也就是说,你应该从数据库代码分开的BLL的代码,以便您可以测试尽可能多的业务逻辑而不触及数据库。自从我最初写这篇文章,如{A2}的对象-关系映射库普及,几乎可以肯定的首选方式,坚持对象的数据。这些库不删除需要测试的对象关系映射(因为还必须验证映射是正确的),但它们消除样板代码。他们也更容易测试,因为1)他们可以自动检查数据库架构相匹配的一流的结构,和2),可以轻松地配置应用程序使用单独的数据库,测试和生产的持久性数据。网上有很多文章描述这个过程中,只需搜索"测试休眠"。这一切都不会回答你的问题,"(不)来测试?"我一直采取下列务实,也许是巧舌如簧,方法进行测试:测试,你可以尽可能多,什么是最有可能打破开始。这意味着你应该花大部分的时间验证复杂的业务逻辑,而不是说你行的getter属性返回相同的值,你给他们制定者(这是数据库持久性的本质)。因此,你应该创建一个测试架构,最大限度地减少所需的时间来验证映射是正确的。这是一个持久性库,大致是这样,我在文章中描述的体系结构变得非常有用。有了这样的架构到位,你可以集中测试更重要的代码
Kuldeep Vijaykumar
评论会员:游客 时间:2011/12/06
在此之前,感谢您的时间,并给我一些很好的建议很多布雷特就关闭油烟机,我还有一个问题,麻烦你在这里,比方说,我建立一个全新的Web应用程序,并说我不是很热衷沿测试驱动开发(TDD)方法。在这样的情况下下,应用程序的这部分应该是"单元测试"?应该如何能够决定什么样的测试将是最适合在心中重要的3层的单元测试的最有效保持整个演习,即用户界面,BLL和DAL一些真正的好切实可行的单位测试样品通过NUnit的任何信息/链接必将有助于我最再次感谢,Kuldeep
baruchl
评论会员:游客 时间:2011/12/06
我是一个大风扇和TDD的医生,但据我所知,它可能不适合所有的开发和应用。不过,你可以从什么可致电发展为导向的测试或开发并行测试了很多好处。这是很难进行单元测试的UI,但也有一些工具,允许一个记录/重放UI交互。我没有任何伟大的程度,所以我不能评论其效用。我很少发现有效的直接测试DAL。首先,测试对象持久性(如在文章中),验证对象-关系映射,最有可能失败,因为应用程序方面的发展。第二,我发现,从测试的创建/读取/更新/删除操作,因为它们通常会自动生成或由第三方库处理,就像我在我以前的答复描述由DAL提供什么好处。剩下的BLL,特别是域模型。就像我说我以前的答复中,测试你可以尽可能的,什么是最有可能打破开始。什么是最有可能打破在域模型中?在我的经验,域对象之间复杂的相互作用隐藏的最错误。因此,当我需要测试现有的代码(而不是当我做TDD),我发现最大的效益与高层次的调解对象开始。我写了一些测试验证的基本功能和许多边境和特殊情况下,尽可能。如果测试的休息,我调试找到问题的根源,然后写一个最小的测试,揭示了错误。通常情况下,这个最小的测试验证一个或两个域对象的一些低级行为。因此,测试套件的发展有机地成为一个有用的资源库的回归测试。它也是有用的问自己,"我想获得这些测试什么?"一个回答说:"找到尽可能多的错误",会导致你写的更彻底的测试,比回答"验证系统的基本功能的80%"。覆盖标准,它也是很好的决定。也就是说,什么样的条件下,必须测试满足您认为他们完成的呢?例如,你可以说你的测试应涵盖GT;中最常用的80%域对象的基本块的80%。在实践中,覆盖准则往往是确切的要少得多。例如,您可能需要为每一个足够复杂的方法测试的情况下,你写的,在过去​​的几类。不幸的是,我没有任何手头上的小试样品,但也有许多优秀的书籍和网站,回答你的问题,"要测试什么?"特别是:*{A3}安迪亨特,戴夫托马斯和马特Hargett*{A4}由KentBeck(一个有用的阅读,甚至如果你不这样做TDD)
达伦 - 普鲁特
评论会员:游客 时间:2011/12/06
。再次感谢你分享你的思想,这是相当综合性的布雷特你有共同的关于"要测试什么,什么不可以"是挺有意思的,我相信他们会播下一些种子,在我的理解更加清晰。不朽的问题的想法根据您的建议,我设法得到"#与安迪亨特NUnit的在C务实的单元测试"浏览通过几个章节和我必须说,这是一个相当不错的书这能最终回答我的问题,电子图书的格式可能在一个更详细的的方式。Kuldeep
布雷特丹尼尔
评论会员:游客 时间:2011/12/06
好文章。几点意见1。在现实中,与持久性数据处理时,并不总是作为一个模型中使用的持久性对象的一种很好的做法,因为如果你是处理大量数据,它通常是昂贵的跨层移动的所有对象,并保存其中之一一个数据库/持久性存储。相反,你应该考虑这样的对象的集合转变成一个数据集,然后使用批量更新,保存到数据库中的数据。2。一个重要的事情,你忘了提,是,有时你也想在这种情况下,你的BLL和不仅是公共方法的内部测试,使用的NUnit的方法,你不能这样做,只是因为方法是不暴露。我在这种情况下,这样做,是增加一个预处理条件下,无论是在DLL和NUnit的代码,所以在调试的时间,而不是在生产中暴露的方法和测试。例如:在BLL:#如果DEBUG公共无效JustAMethodToTest()#ELSE私人无效JustAMethodToTest()#ENDIF{...}{BR}在NUnit的代码:#如果DEBUG公共无效TestTheMethod(){...}{BR}#ENDIF快乐编码,康布斯
DuncanJSmith
评论会员:游客 时间:2011/12/06
添加这样的条件,使得代码非常难以阅读和维护。这将更好地提取到自己的类的所有私有方法,这样你可以单元测试。正如他们所说,只是一个私有方法是一个类,尖叫被释放{S0}