相关疑难解决方法(0)

如何编写好的单元测试?

有人可以建议书籍或材料来学习单元测试吗?

有些人认为没有单元测试的代码是遗留代码.如今,测试驱动开发是一种轻松管理大型软件项目的方法.我非常喜欢C++,我没有接受任何正规教育就自己学习.我之前从未考虑过单元测试,所以感到被遗忘了.我认为单元测试很重要,从长远来看会有所帮助.我将不胜感激这个主题的任何帮助.

我主要关注的是:

  1. 什么是单元测试?它是一个应该分析的测试用例的综合列表吗?所以让我们说一下我有一个名为"复数"的类,其中包含一些方法(让我们说找到共轭,一个重载的赋值运算符和一个重载的乘法运算符.这类的典型测试用例应该是什么?有什么方法吗?选择测试用例?

  2. 有没有可以为我创建单元测试的框架,或者我必须编写自己的类进行测试?我在Visual Studio 2008中看到了"测试"的选项,但从未让它工作.

  3. 单元测试的标准是什么?是否应对班级中的每个功能进行单元测试?为每个班级进行单元测试是否有意义?

c++ tdd unit-testing

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

成为最有效率的单人团队

像这里的许多人一样,我是一个单人开发团队.我负责收集项目需求,设计概念屏幕,规划和开发数据库以及编写所有代码.

作为一个单人团队很好,但有负面影响.我没有能力快速咨询其他开发人员,我很少得到我的代码的第二眼,我相信你们也可以拿出许多其他负面因素.

为了充分利用我的时间,并最有效地投入到我的工作中,我可以在日常工作中实施哪些提示或实践,以成为最好的单人团队?

performance time-management

40
推荐指数
2
解决办法
4057
查看次数

单独的开发人员应该使用什么样的软件开发流程?

我是一家非常小的公司的独立开发人员.我的工作非常混乱,我正在寻找方法使其更有条理.

一个问题是我的项目实际上没有管理.很少有人问我正在做什么,或者我有什么问题.在某些时候,有人谈论每周一次的状态会议,但那是一段时间以前.似乎如果我想要这样的东西,我将不得不自己安排.有时我对我应该做的事情有点迷失,因为我没有定义任务或明确的时间表.

从书籍和文章中我发现了许多可能有用的东西.就像有一个好的编码标准(在我看来只有一个粗略的风格指南,有点过时),代码检查,TDD,单元测试,错误数据库...但在一个小公司,它似乎没有资源或时间任何不重要的事情.我在嵌入式域中工作的事实似乎使事情变得更加复杂.

我觉得在短时间内也有偷工减料的习惯.这导致未完成和不专业的产品和错误等待在以后出现.我想他们也很难维持.所以,我即将继承一个具有挑战性的代码库,进行新的开发,需要学习很多新东西,我想尝试同时为它们构建一个流程.它最终可能会有所回报,但由于经验不足,我不确定是否可以将其拉下来.

在这样的小商店里,环境远非编程的最佳选择.还有许多其他事情需要偶尔完成,如客户支持,接听电话,签署包裹,硬件测试,装配以及可能出现的任何其他任务.所以你了解了资源.这并不全是坏事(有时解决一些客户问题很有启发性),我相信它可以改进,但这是我真正关心的其他事情.

是否有可能在这样的地方进行开发?

进行某种管理会有所帮助吗?什么样的?

是否有可能用小资源制造优质产品?

我如何让自己和其他人相信几十年来成功运作的公司需要改变?什么是必要的?

也许有人在类似的商店工作?

methodology

35
推荐指数
2
解决办法
2403
查看次数

TDD,DDD和封装

经过几年跟随我工作地点"建筑师"传下来的不良做法并认为必须有更好的方法,我最近一直在阅读TDD和DDD,我认为原则和实践将是一个非常适合我们编写的软件的复杂性.

但是,我见过的许多TDD示例都在域对象上调用一个方法,然后测试对象的属性以确保正确执行行为.

另一方面,业内几位受人尊敬的人(Greg Young最着名的是关于CQRS的讨论)主张通过删除所有"getters"来完全封装每个域对象.

因此,我的问题是:如果禁止检索域状态,如何测试域对象的功能?

我相信我缺少一些基本的东西,所以请随时称我为白痴并启发我 - 任何指导都将非常感谢.

c# tdd getter encapsulation domain-driven-design

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

谁为webkit写了250k测试?

假设每小时产量为3,那就是83000小时.每天8小时制作10,500天,除以30来获得342个神话般的人月.我称之为神话故事,因为每人每周写125次测试是不真实的.

在那里,任何有智慧的灵魂都可以说明什么样的神话人物为大型软件项目编写了不真实的测试数量?谢谢.

更新 chrisw认为只有20k测试(请查看下面的解释).
PS我真的很想听听从事大型测试基地项目的人们的意见

javascript css testing webkit google-chrome

22
推荐指数
4
解决办法
1736
查看次数

如何轻松单元测试Blackberry代码?

对于我的大学课程,我们正在开发一个多线程Blackberry应用程序,它允许我们使用蓝牙扫描运行我们应用程序的其他设备,然后通过Wifi接口通过TCP传输文件,实现NAT遍历,同时记录我们的GPS位置.(这是RIM赞助的计算机网络课程,如果还不明显的话.)

我越来越喜欢测试驱动开发,并将用它来开发我的家庭作业.但是,由于非法修饰符,我在测试期间扩展或以其他方式调用的任何Blackberry类都会给出一个ClassFormatError.我认为这个错误是由于带有Blackberry代码的jar必须是专门为其专有JVM编译的.

到目前为止,我已经使用代理模式并实现了代理的模拟对象.然而,由于我继承了许多原生Blackberry类,因此这变得非常繁琐.

我还想避免在可能的情况下启动Blackberry模拟器.启动它可能需要几分钟,这对于单元测试来说是不切实际和烦人的.

有没有简单的方法来单元测试我的Blackberry代码?

java tdd unit-testing blackberry

21
推荐指数
1
解决办法
5146
查看次数

如何在没有这么多嘲笑的情况下编写测试?

我是正确的测试驱动设计或行为驱动设计的忠实拥护者,我喜欢编写测试.但是,我一直把自己编码到一个角落里,我需要在一个特定的测试用例中使用3-5个模拟进行单个类.无论我从哪个方向开始,自上而下或自下而上,我最终都需要一个至少需要三个来自最高抽象级别的合作者的设计.

有人可以就如何避免这个陷阱给出好的建议吗?

这是一个典型的场景.我设计了一个Widget,它从给定的文本值生成一个Midget.在我深入了解细节之前,它始终非常简单.我的Widget必须与几个难以测试的东西进行交互,比如文件系统,数据库和网络.

所以,不是将所有内容都设计到我的Widget中,而是制作一个Bridget合作者.Bridget负责处理复杂性,数据库和网络的一半,使我能够专注于另一半的多媒体演示.那么,我制作了一个执行多媒体作品的Gidget.整个事情需要在后台发生,所以现在我包含了一个Thridget来实现这一点.完成所有操作后,我最终得到了一个Widget,它可以将工作交给Thridget,后者通过一个Bridget来讨论将其结果发送给Gidget.

因为我在CocoaTouch中工作并试图避免模拟对象,所以我使用自分流模式,其中协作者的抽象成为我的测试采用的协议.有3个以上的合作者,我的测试气球变得太复杂了.即使使用像OCMock模拟对象这样的东西,也会给我一个复杂的顺序,我宁愿避免.我试着把我的大脑缠绕在一个菊花链的合作者身上(一个委托给B的代表,他代表C等等),但我无法想象它.

编辑 从下面举一个例子,假设我们有一个必须从套接字读/写并呈现返回的电影数据的对象.

//Assume myRequest is a String param...
InputStream   aIn  = aSocket.getInputStram();
OutputStream  aOut = aSocket.getOutputStram();
DataProcessor aProcessor = ...;

// This gets broken into a "Network" collaborator.
for(stuff in myRequest.charArray()) aOut.write(stuff);
Object Data = aIn.read(); // Simplified read

//This is our second collaborator
aProcessor.process(Data);
Run Code Online (Sandbox Code Playgroud)

现在上面显然处理网络延迟,所以它必须是Threaded.这引入了一个Thread抽象,使我们脱离了线程单元测试的实践.我们现在有

AsynchronousWorker myworker = getWorker(); //here's our third collaborator
worker.doThisWork( new WorkRequest() {
//Assume myRequest is a String param...
DataProcessor aProcessor = ...;

// Use our "Network" collaborator.
NetworkHandler networkHandler …
Run Code Online (Sandbox Code Playgroud)

tdd unit-testing mocking

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

我如何真正单元测试代码?

我正在阅读Joel Test 2010,它让我想起了我对单元测试的一个问题.

我如何真正进行单元测试?我没有单元测试功能?只有全班?如果我有15个<20行的课程怎么办?我是否应该为每个类别编写一个35行单元测试,将15*20行写入15*(20 + 35)行(从300到825,将近3倍的代码).

如果一个类只被模块中的其他两个类使用,我应该对它进行单元测试,还是对其他两个类的测试是否足够?如果他们都是<30行代码应该怎么办?

如果我编写代码来转储数据,我永远不需要阅读它,例如使用另一个应用程序.另一个应用程序不是命令行,或者它无法验证数据是否良好.我还需要进行单元测试吗?

如果应用程序是实用程序且总数小于500行代码,该怎么办?或者是使用了一周,将在未来使用,但总是需要重新配置,因为它是为快速批量处理和每一个项目都需要调整,因为欲望输出不变.(我想说那里有没有办法解决它,为正当的理由,它会永远进行调整)我的单元测试它如果又如何?(也许我们不关心我们是否打破了过去使用的功能,但现在或将来都没有).

等等

我认为这应该是一个维基.也许人们想说出他们应该单位测试(或不应该)的确切内容?也许书籍链接很好.我尝试了一个,但它从未澄清应该进行单元测试的内容,只是编写单元测试和解决方案的问题.


此外,如果班是为了只在该项目(由设计,规格或任何其他原因)和类心不是单独有用的(可以说是产生使用返回HTML准备评论数据的HTML)我真的需要测试它?通过检查当我的项目没有使用空注释时,所有公共函数是否允许空注释对象.它的那些东西让我想知道我是否在测试错误的代码.在项目中还有大量的课程.它是临界一次性或不是非常有用的单独代码困扰我.

unit-testing

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

是否存在过多的单元测试?

我试着查看有关单元测试的所有页面,但找不到这个问题.如果这是重复,请告诉我,我将删除它.

我最近的任务是帮助我公司实施单元测试.我意识到我可以对所有Oracle PL/SQL代码,Java代码,HTML,JavaScript,XML,XSLT等进行单元测试.

是否存在过多的单元测试?我应该为上述所有内容编写单元测试还是过度杀伤?

unit-testing

19
推荐指数
3
解决办法
4282
查看次数

为什么功能测试不够?单元测试提供什么?

我刚与我的首席开发人员进行过对话,他们不同意单元测试是必要或重要的.在他看来,具有足够高的代码覆盖率的功能测试应该足够,因为任何内部重构(接口改变等)都不会导致需要重写或重新检查测试.

我尝试了解释,但没有走得太远,并认为你们可以做得更好.;-)所以......

对功能测试不提供的单元测试代码有什么好的理由?如果您拥有所有功能测试,会有什么危险?

编辑#1感谢所有的好答案.我想通过功能测试补充一点,我并不仅仅意味着对整个产品进行测试,而是对产品中的模块进行测试,而不是在必要时进行模拟的单元测试的低级别等等.另请注意我们的功能测试是自动的,并且持续运行,但它们只需要比单元测试更长的时间(这是单元测试的一大优势).

我喜欢砖与房子的例子.我想我的主要开发人员说的是测试房子的墙壁就足够了,你不需要测试个别砖...... :-)

tdd unit-testing functional-testing

12
推荐指数
3
解决办法
1545
查看次数