我刚刚回顾了最近几乎完成的项目并发现了一个非常严重的问题.我花了大部分时间来测试代码,重现不同情况"可能"导致代码错误.
您是否有任何想法或经验可以分享如何减少测试所花费的时间,从而使开发更加顺畅?
我试着按照我所有代码的测试驱动的概念,但我发现很难实现这一点,真的需要一些资深人士的帮助.
谢谢
回复:全部
感谢上面的答案,最初我的问题是如何减少一般测试的时间,但现在,问题在于如何编写有效的自动化测试代码.
我将尝试提高我的技能,如何编写测试套装以减少这部分时间.
但是,我仍然在努力减少如何减少重现错误所花费的时间,例如,一个标准的博客项目很容易重现情况可能会导致错误但是复杂的定制内部系统可能"永远"无法测试经常外出,值得吗?您对如何在此类项目上构建测试计划有任何想法吗?
谢谢你的进一步答案.
我知道如何在Rails中运行功能/集成测试,这个问题是关于最佳实践的.假设使用四个不同的用户角色执行授权:
这意味着对于每个动作,最多可以有五种不同的行为(4个角色+未经认证/匿名).我采取的一种方法是测试每个操作的每个角色,例如:
test_edit_by_anonymous_usertest_edit_by_basic_usertest_edit_by_editor_usertest_edit_by_admin_usertest_edit_by_super_user但这显然会导致很多测试(网站上的每个控制器操作都需要进行五次测试).相反的方法是单独测试授权机制,然后在测试每个操作(在安装时)之前进行身份验证,并且只测试每个页面的一个版本.
我已经尝试了几种具有不同程度特异性的方法,但对任何事情都没有完全满意.当我测试更多案例时,我感觉更舒服,但是测试代码的数量和抽象的难度一直是关闭的.有没有人能够解决这个问题,他们对此感到满意?
如何验证两个CRC实现是否会生成相同的校验和?
我正在寻找一种详尽的实施评估CRC特有的方法.
在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:
class ProductsControllerTest < ActionController::TestCase
setup do
@product = products(:one)
...
end
...some tests here...
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:
方法调用在哪里/如何products()定义?
究竟products(:one)是什么意思?看看代码,它可能意味着"创建一个产品",但它是如何工作的?
NB我是Ruby/Rails的新手,如果这些都是一个微不足道的问题,请道歉.
集成/功能/验收测试本身很难维护,原因有很多:它们需要很长时间才能运行,难以保持绿色,可能看似随机失败,调试繁琐等等.但是,他们可以如果一个人设法拥有一个可靠的非单元测试套件,那就是无价的.
有这样的套房,只是一个梦想?团队如何能够管理始终如一的绿色,低维护的非单元测试套件?
我已经开始进行单元测试了,我正在尝试对我为我正在使用的WSDL资源构建的API包装器执行单元测试.
我可以对我的类进行单元测试,但是测试外部API的最佳实践是什么?我应该费心去测试吗?除了测试我验证连接和参数和东西的测试之外,确保我的数据得到适当更新的最佳方法是什么(如果我甚至应该这样做)?
我遇到了一个难题.我们有一个过时的系统,我正在编写Behat测试.它在大多数情况下都很有效.但是我注意到如果我针对当前环境测试的数据是针对/从不同环境中提取的,那么Behat测试将失败的问题.
例如,如果我在QA中通过电话功能测试搜索并期望它返回特定的实体ID,则我不能使用相同的电话号码和实体ID来在RC或Live中进行测试.所以我想要一种可管理的方法来维护Behat中每个环境的测试数据.
这里有几个想法,例如将数据放入配置文件(非常不受欢迎)或为每个功能创建CSV文件.我还在考虑使用表或场景大纲构建所有特定于数据的场景,并且具有将用于检查当前环境的环境列,并在该行不适用于当前环境时跳过.也许使用Background或其他一些钩子来帮助解决这个问题.
有没有人知道使用Behat处理具有不同数据集的多个环境的好方法或最佳实践?
php continuous-integration integration-testing functional-testing behat
我在集成测试中使用ShrinkWrap启动Jetty服务器.
问题:
当我启动我的测试jetty-server而不是制作我的控制器的模型时 - 模型不起作用!我建议原因是不同的类加载器:JMockit - AppClassLoader,Jetty - WebAppClassLoader.
题:
如何使模拟工作正常?
PS 我用谷歌搜索 -javaagent:jmockit.jar选项可能会有所帮助.但事实并非如此.是否有必要基于1.7 jdk的maven项目?
加成:
我写了演示来解释我的问题.您可以通过参考找到它.
关于我的演示:
除了十个代码之外,它与那些项目相同.我只添加了JMockit和一个模拟来说明问题.
您应该看到JettyDeploymentIntegrationUnitTestCase.requestWebapp方法:在那些方法中,我们使模拟不起作用.
您可以检查Jetty和JMockit是否通过兄弟类加载器加载类,因此JMockit根本看不到Jetty的类
URLClassLoader
|
|-Launcher$AppClassLoader
|-WebAppClassLoader
Run Code Online (Sandbox Code Playgroud) 我目前正在使用Espresso对我的Android应用程序进行功能测试,它非常棒.问题是我希望能够在地图上测试特定的操作.由于整个应用程序都以与地图的交互为中心,有没有办法实际执行此操作?
事情会很棒:
我原本以为我可以调用onView(withId(R.id.map)))来获取地图的实例,但这会返回一个我不相信的视图交互.我愿意使用其他框架,但如果它可以在浓咖啡中完成,那就太好了.
android functional-testing google-maps-android-api-2 android-espresso
我进行了一项测试,如果测试失败,则表明该应用程序存在较大问题。如果一项测试失败,那么运行其余测试将毫无意义。
如果单个测试失败,是否有办法保全套件,但如果该测试通过,则运行所有测试?