Questions tagged «testing»

根据软件系统的预期行为来验证该软件系统的行为。

6
参数化测试-您何时以及为何使用它们?
最近在工作中,我们对参数化测试存在一些意见分歧。通常,我们使用TDD样式(或至少尝试使用),因此我了解该方法的好处。但是,我很难看到参数化测试带来的收益。作为参考,我们致力于一项服务及其通过RESTful接口公开的库。 到目前为止,我所看到的是至少在Eclipse中使用JUnit的测试: 缺少详细信息-测试失败时,很难查看导致测试失败的参数 通常创建起来很复杂 倾向于在编写代码后创建-严格来说,这并不是缺点,但是人们在开始编写一段代码时是否着眼于参数化测试? 如果有人提供了一些示例,说明它们在哪些地方真正有用,甚至有任何很好的使用它们的提示,那就太棒了。我想确保我不仅固执己见,因为我个人不选择使用它们,而是查看它们是否属于我们应该考虑成为测试武器库的一部分。


2
如何开源其git存储库中历史上拥有受版权保护的媒体的项目?
我想以免费许可证发布音频指纹识别软件项目,但是存储库包含受版权保护的音频文件。测试用例当前还使用这些文件。如何在不违反版权的情况下以最高版本历史向公众发布代码? 细节: 该代码在git下进行了版本控制。在发布之前,我们会将其全部折叠回一个分支。 有400 MB的音频数据。有些文件是来自Jamendo的免费许可音乐,另一些是我们个人收藏中的MP3。 无论采用哪种方法,我们都将始终保留原始存储库的不变副本,以免破坏项目历史。 主要问题:如何处理公开发布? 从git存储库中删除有问题文件的所有历史记录,并释放更改后的存储库。(v64 指出了执行此操作的方法。) 另外,也可以对代码的当前状态进行快照,甚至不必费心查看预发布代码的公开历史记录。 附带问题:鉴于项目的早期阶段有时需要私有代码或媒体,我们如何首先避免这种困境?

2
RSpec与Test :: Rails中的单元
我从来没有真正相信过从Ruby on Rails中的Test :: Unit切换到RSpec所获得的优势(尽管不时阅读有关RSpec的信息)。 大多数Rails项目似乎都在使用RSpec呢? (一些代码示例清楚地表明了一个相对于另一个的优势,将不胜感激)

8
面试中的白板“测试”:备份(白板)代码的合法方法?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 据我所知,白板代码中有错误(甚至是错字或“;”错字)通常会花费您一些面试分数。避免这种情况将不可避免地使一个校对代码一次又一次地(浪费时间,并可能浪费神经能量/集中力),甚至使用更简单(因而效率较低)的算法-这两种方法都再次“昂贵”! 因此,为什么不只是快速编写出像拥有一个(单元)测试框架一样又优雅又有效的代码,然后正常地对其进行测试(仅在白板上)呢? 有没有人尝试过/见过这种方法?整个想法值得吗? [当然,这也适用于笔和纸的情况]

5
如何结合严格的TDD和DDD?
TDD是关于在测试的指导下设计代码的。 因此,通常不预先构建典型的层。它们应该在重构步骤中稍微出现。 域驱动的设计涉及许多技术模式,它们定义了完善的层,如应用程序层,基础结构层,域层,持久性层。 要从头开始DDD项目的编码部分,应如何操作? 我是否应该严格让设计从测试中脱颖而出,这意味着没有关注点分离(没有层次)和重构以适合DDD技术模式? 还是应该创建那些空层(应用程序,实体/域服务,基础结构),并让TDD独立地适合每个层(使用模拟在层之间进行隔离)?

5
单元测试无效方法
为了修复应用程序中的错误,我postLogin通过将调用添加到名为的现有方法上来修改了一种名为的方法getShoppingCart。 码 protected void postLogin() { getShoppingCart(); } 但是,我不确定编写单元测试的最佳方法postLogin是什么。 方法1 使用Mockito中的verify可以简单地验证该方法是否已被调用。 verify(mock).getShoppingCart(); 方法2 通过获取用户购物车的值来测试方法调用的副作用。 AssertNotNull(user.getShoppingCart()); 一种方法比另一种更好吗?

1
单元测试API客户端和包装器
我一直在兜圈子,试图找出对我正在开发的API客户端库进行单元测试的最佳方法。该库具有一个Client基本上与API进行1:1映射的Wrapper类,以及一个额外的类,该类在的顶部提供了更加用户友好的界面Client。 Wrapper --> Client --> External API 我首先针对Client和编写了一系列测试Wrapper,实际上只是测试它们是否转发到操作的任何适当功能(Wrapper在上操作Client,并Client在HTTP连接上操作)。但是,我开始对此感到不舒服,因为我感觉自己正在测试这些类的实现,而不是接口。从理论上讲,我可以将这些类更改为具有另一个完全有效的实现,但是我的测试将失败,因为未调用我希望调用的函数。对我来说,这听起来像是脆弱的考验。 之后,我考虑了类的接口。测试应该验证类是否确实完成了其应做的工作,而不是他们是如何完成的。那我该怎么做呢?首先想到的是对外部API请求进行存根。但是,我担心过度简化外部服务。我见过的很多存根API的示例都给出了罐头响应,这听起来像是一种非常简单的方法,可以仅测试您的代码是否针对假API正确运行。另一种方法是模拟服务,这是不可行的,并且每当真实服务发生变化时就需要保持最新状态-感觉像是过分杀伤和浪费时间。 最后,我从程序员SE的另一个答案中读取了此内容: 远程API客户端的工作是发出某些调用-不多也不少。因此,它的测试应验证它是否发出了这些呼叫-不多也不少。 现在,我或多或少地确信-测试时Client,我需要测试的是它向API发出了正确的请求(当然,总有API会更改但我的测试继续通过的可能性-但这就是集成测试很有用的地方)。由于Client与API只是1:1的映射,因此在将一个有效实现更改为另一个之前,我的担心并没有真正适用-的每种方法只有一个有效实现Client。 但是,我仍然坚持Wrapper上课。我看到以下选项: 我对Client类进行存根处理,然后测试是否调用了适当的方法。这样,我做的与上述相同,但是将其Client作为API的替代。这使我回到了起点。再一次,这给了我测试实现而不是界面的不舒服的感觉。将Wrapper很可能使用了完全不同的客户端实现。 我创建一个模拟Client。现在,我必须决定对它进行模拟的程度-创建服务的完整模拟将花费很多精力(比库本身要付出更多的工作)。API本身很简单,但是服务却很复杂(本质上是一个对数据进行操作的数据存储)。再说一次,我将必须使模拟与real保持同步Client。 我只是测试是否正在发出适当的HTTP请求。这意味着Wrapper将通过一个真实的Client对象进行调用以发出这些HTTP请求,因此我并不是在单独测试它。这使得它有点可怕的单元测试。 因此,我对这些解决方案都不满意。你会怎么做?有正确的方法去做吗?


3
什么是测试中的开发人员?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我最近正在与一名招聘人员交谈,该人员希望将我安排在一家公司中担任Test Developer的职位。从本质上讲,他听起来像一个职位,您可以摆弄新的编程技术,测试软件中的错误和改进,但是不必担心标准截止日期。您将在工作中变得很有创造力。 但是这种描述对我来说还是有点模糊。我从事Web开发已经有很多年了,主要是使用PHP。所以我想知道社区中的其他人是否更多地了解这些职位通常需要做什么。 我知道这可能不是适合该论坛的主题,但是这是我在Stack Exchange中可以找到的最合适的东西,如果没有关闭,我将不胜感激,因为在这里实际上没有其他地方可以询问它了。 。 我已经尝试过Google搜索,但是那里没有很多信息。那么测试中的开发人员到底是什么?


4
测试具有随机行为的程序的最佳实践是什么?
在进行研发工作时,我经常发现自己编写的程序在行为上有很大的随机性。例如,当我从事基因编程工作时,我经常编写生成并执行任意随机源代码的程序。 测试此类代码的问题在于,错误通常是间歇性的,并且很难重现。这不仅仅是将随机种子设置为相同的值并重新开始执行。 例如,代码可能从内核环形缓冲区读取一条消息,然后对消息内容进行条件跳转。自然,当以后尝试重现该问题时,环形缓冲区的状态将已更改。 即使此行为是一种功能,它也可能以意想不到的方式触发其他代码,从而经常揭示出单元测试(或人工测试人员)找不到的错误。 是否有建立此类测试系统的最佳实践?如果是这样,一些参考资料将非常有帮助。如果没有,欢迎任何其他建议!

5
是否应该测试算法复杂度?如果是这样,怎么办?
假设我正在实现一些简单的操作,例如搜索排序的列表/数组。该函数(在c#中)看起来类似于: static int FindIndex(int[] sortedList, int i); 我可以根据功能来实现和测试它,但是出于显而易见的原因,我通常宁愿二进制搜索胜于线性搜索或某些故意的愚蠢行为。 所以我的问题是:我们是否应该尝试编写能够在算法复杂度方面保证性能的测试,如果可以,如何做? 我已经开始在这个问题的“您应该”部分的两边都进行争论,但是我想看看人们在没有我的争论的情况下会怎么说。 就“如何”而言,这变得非常有趣:)您可以看到参数化比较运算符并进行测试,该测试的比较运算符对比较进行计数或类似的操作。但是仅仅因为你能做并不意味着你应该... 有没有其他人考虑过(可能)?谢谢。

5
CSV解析器的单元测试
我应该使用哪些测试对csv解析器进行单元测试? 我在C#中有一个简单的csv解析器,并且我想确保我对所有常见(和不常见)边缘情况都具有良好的单元测试覆盖率。我应该使用哪些测试来识别潜在问题和边界案例?
14 testing  parsing 

4
编写验收测试用例
我们正在将测试过程集成到SCRUM过程中。我的新角色是编写我们的Web应用程序的验收测试,以便稍后使它们自动化。我已经阅读了很多有关如何编写测试用例的文章,但是没有一个给我实用的建议来编写用于复杂Web应用程序的测试用例,相反,它们引发了我发现难以应用的矛盾原则: 测试用例应该简短:以CMS为例。简短的测试用例易于维护,并且易于识别输入和输出。但是,如果我想测试一系列的操作(例如,添加文档,向另一个用户发送通知,其他用户答复,文档更改状态,用户收到通知),该怎么办?在我看来,测试用例应该代表完整的场景。但是我可以看到这将如何产生明显复杂的测试文档。 测试应该标识输入和输出:如果我的表单很长,包含许多相互作用的字段,并且行为不同,该怎么办。我要为所有内容编写一份测试,还是为每项编写一份? 测试用例应该是独立的:但是如果测试上传操作要求连接操作成功,我该如何应用呢?它如何适用于编写测试用例?我应该为每个操作编写一个测试,但每个测试都声明其依赖关系,还是应该为每个测试重写整个场景? 测试用例应轻松记录在案:此原则特定于敏捷项目。那么,您对如何实施这一原则有何建议? 尽管我认为编写验收测试用例会很简单,但我发现自己对要做的每一个决定都不知所措(仅供参考:我是开发人员,而不是专业的测试人员)。所以我的主要问题是:为了编写适用于复杂应用程序的可维护验收测试用例,您有什么步骤或建议。谢谢。 编辑:澄清我的问题:我知道验收测试应该从需求开始,并将整个应用程序视为一个黑匣子。我的问题与编写测试文档,确定测试用例,处理测试之间的依赖关系的实际步骤有关...对于复杂的Web应用程序

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.