Tag: unit testing

在unit testing中多重声明是不好的? 即使链接?

在unit testing中检查如此之多的东西有什么不对吗? ActualModel = ActualResult.AssertViewRendered() // check 1 .ForView("Index") // check 2 .WithViewData<List<Page>>(); // check 3 CollectionAssert.AreEqual(Expected, ActualModel); // check 4 这个testing的主要目标是validation返回的正确的视图(检查2),它包含正确的数据(检查4)。 我可以通过将其分成多个testing来获得任何东西吗? 我所做的一切都是正确的,但是如果它没有实际价值,我不会分裂它。 我对unit testing很新,所以要温和。

如何告诉phpunit停止失败

我正在运行一大组phpunittesting,我希望看到哪个testing一旦失败就失败了,而不是等待所有的testing完成,然后列出所有的失败。 我怎样才能告诉phpunit做到这一点?

debugging的最佳实践在unit testing期间声明

大量使用unit testing是否会阻止使用debugging断言? 这似乎是一个debugging断言在testing中的代码意味着unit testing不应该存在或debugging断言不应该存在。 “只能有一个”似乎是一个合理的原则。 这是常见的做法吗? 还是你在unit testing时禁用debugging断言,所以他们可以在集成testing? 编辑:我更新了'断言'debugging断言来区分在testing代码中的断言和unit testing中的行,在testing运行后检查状态。 另外这里是一个我相信显示困境的例子:一个unit testing通过一个被保护函数的无效input,声明它的input是有效的。 unit testing是否应该存在? 这不是公共职能。 也许检查input会杀死perf? 还是应该断言不存在? 该function被保护不是私人的,所以它应该检查它的input是否安全。

如何运行并发unit testing?

如何使用junit来运行并发testing? 假设我有一堂课 public class MessageBoard { public synchronized void postMessage(String message) { …. } public void updateMessage(Long id, String message) { …. } } 我想同时testing多个访问这个postMessage。 对此有何build议? 我希望对我所有的setter函数(或涉及到创build/更新/删除操作的任何方法)运行这种并发性testing。

在factory_girl中填充与小孩的关联

我有一个has_many'Bar'的Foo模型。 我有一个factory_girl工厂为每个这些对象。 Bar的工厂有一个Foo的协会; 它会在创buildBar时实例化一个Foo。 我想要一个创build一个包含一个Bar的Foo的工厂。 理想情况下,这个Bar将通过:bar工厂创build,并且尊重用于创buildFoo的构build策略(创build/构build)。 我知道我可以调用:bar工厂,然后从新Bar中获取Foo引用。 我想避免这个; 在我的testing案例中,重要的对象是Foo; 打电话给Bar工厂似乎有点迂回。 另外,我可以看到有多个酒吧的Foo的需要。 这可能在factory_girl? 你如何在家长中定义这种关系?

我如何testing与junit log4jlogging了一个警告?

我正在testing一个方法,当出现错误时会logging警告并返回null。 就像是: private static final Logger log = Logger.getLogger(Clazz.class.getName()); …. if (file == null || !file.exists()) { // if File not found log.warn("File not found: "+file.toString()); } else if (!file.canWrite()) { // if file is read only log.warn("File is read-only: "+file.toString()); } else { // all checks passed, can return an working file. return file; […]

unit testing和静态方法

阅读并理解unit testing,试图理解下面的post ,解释静态函数调用的困难。 我不清楚这个问题。 我一直认为静态函数是在一个类中四舍五入实用函数的好方法。 例如,我经常使用静态函数来初始化,即: Init::loadConfig('settings.php'); Init::setErrorHandler(APP_MODE); Init::loggingMode(APP_MODE); // start loading app related objects .. $app = new App(); //阅读后,我现在的目标是改为… $init = new Init(); $init->loadConfig('settings.php'); $init->loggingMode(APP_MODE); // etc … 但是,我为这门课写的几十个testing是一样的。 我什么也没有改变,他们仍然通过。 难道我做错了什么? 该职位的作者陈述如下: 静态方法的基本问题是它们是程序代码。 我不知道如何对程序代码进行unit testing。 unit testing假定我可以孤立地实例化一个应用程序。 在实例化过程中,我使用mocks / friendlies替代真正的依赖关系。 通过程序编程,没有任何东西可以“连线”,因为没有对象,代码和数据是分开的。 现在,我从post中了解到,静态方法创build依赖关系,但不直观地掌握为什么不能像常规方法那样容易地testing静态方法的返回值? 我将避免使用静态方法,但是我希望有一个静态方法有用的概念。 从这篇文章看来,静态方法和全局variables一样邪恶,应该尽可能地避免。 任何额外的信息或主题的链接将不胜感激。

为什么$只在'angular.mock.module'函数中可用,$ q只在'angular.mock.inject'函数中可用?

我正在嘲笑一个AngularJSunit testing的服务。 我正在使用$provide服务来replace模拟出来的“真实”服务(这是一个可用的plunker脚本 ): describe('My Controller', function () { var $scope; var $provide; beforeEach(angular.mock.module('myApp')); beforeEach(angular.mock.module(function (_$provide_) { $provide = _$provide_; })); beforeEach(angular.mock.inject(function($rootScope, $controller, $q){ var mockMyService = { getAll : function() { var deferred = $q.defer(); deferred.resolve([ { itemText: "Foo" }, { itemText: "Bar" } ]); return deferred.promise; } }; $provide.value('myService', mockMyService); $scope = $rootScope.$new(); […]

如何在AngularJSunit testing中模拟$ window.location.replace?

我有以下服务: angular.module("services") .factory("whatever", function($window) { return { redirect: function() { $window.location.replace("http://www.whatever.com"); } }; }); 如何在unit testing中模拟$window对象以防止在运行testing时重新加载页面? 我试过使用 spyOn($window.location, 'replace').andReturn(true); ,但它没有工作(仍然有"Some of your tests did a full page reload!"错误)和 $provide.value('$window', {location: {replace: jasmine.createSpy()}}) ,但我得到一个错误( Error: [ng:areq] Argument 'fn' is not a function, got Object )堆栈跟踪指向只有angular度自己的源,所以这是没有多大的帮助…

为什么我需要一个嘲笑框架为我的单位testing?

最近围绕.NET世界中所有不同的嘲笑框架都有相当多的炒作。 我还没有完全掌握他们的优点。 编写我自己需要的模拟对象似乎并不难。 特别是在Visual Studio的帮助下,我可以快速编写一个实现我想要模拟的接口的类(它为我自动生成几乎所有的东西),然后为我testing所需的方法编写一个实现。 完成! 为了节省几行代码的唯一目的,为什么要理解一个嘲笑框架的麻烦。 或者是一个嘲笑的框架不仅是关于保存代码行?