我将Redmine版本3.4.2.stable安装到Ruby 2.3.3上,然后点击rake test
。
只有3次测试失败,这对于新安装的数千次测试的首次运行非常有用。
然后我添加了一堆插件。我们只是说它们是:
google_analytics_plugin 1.0.0
progressive_projects_list 1.0.0
redmine_agile 1.4.5
redmine_agreement 0.1.1
redmine_base_deface 0.0.1
redmine_cms 1.0.1
redmine_contacts 4.1.1
现在更多的测试失败了。确切地说,4225个测试用例中有215个失败和1530个错误。我将假设rake test
调用rake redmine:plugins:test
,但这仍然是令人难以置信的失败次数。
例如,其中一个错误是:
MemberTest#test_validate_member_role:
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: '\xD0\xAD\xD1\x82\xD0\xB8...' for column 'title' at row 1: INSERT INTO `wiki_pages` (`created_on`, `title`, `id`, `wiki_id`, `protected`, `parent_id`) VALUES ('2007-03-07 15:18:07', 'Этика_менеджмента', 10, 1, 0, NULL)
似乎有人将语言转换为俄语并且没有将其切换回来。
现在我的实际问题是:Redmine-land的每个人都接受这种程度的测试脆弱性吗?我当然不能指望修复每个测试,向其维护者提交补丁,然后升级我的客户端以使用这些插件的最新版本。
我应该如何使用Redmine进行TDD?
答案 0 :(得分:0)
Redmine项目本身维护其核心测试,假设其功能完整性到位,即没有插件可以改变功能。因此,没有任何插件的普通Redmine有望通过所有核心测试。
然而,一旦你介绍插件,事情会发生变化。由于许多插件挂钩或更改了许多内部Redmine功能(通常通过猴子补丁)以提供其功能,因此安装它们会导致核心Redmine破坏的各种测试,因为他们的假设不再适用。由于Remdine只有很少的内部API可以插入插件,因此猴子补丁通常是插件挂入核心的唯一方式。
不幸的是,虽然很难(如果不是不可能)对核心测试以及插件的功能进行修补,以使其适应新的/改变的行为。
这导致了当前不幸的情况,即几乎所有Redmine插件几乎都没有(如果有的话)测试过。有时,您将对插件的功能进行单元测试,但是全功能集成测试非常很少见。使用插件时,您通常不能依赖于工作测试,但必须恢复代码审查和手动点击测试。
我发现在查看插件时,最好的插件只有很少的猴子补丁,尝试将自己限制在稳定的接口或尽可能提供挂钩,并避免覆盖Redmine的核心功能。