为了帮助我的团队编写可testing的代码,我想出了这个简单的使我们的C#代码库更可testing的最佳实践列表。 (有些观点指的是Rhino Mocks的限制,这是C#的嘲讽框架,但规则也可能更普遍适用。)有没有人有任何最佳实践,他们遵循? 要最大化代码的可testing性,请遵循以下规则: 先写testing,然后写代码。 原因:这可以确保您编写可testing的代码,并且每行代码都会为其编写testing。 使用dependency injectiondevise类。 原因:你不能模拟或testing什么是看不到的。 使用Model-View-Controller或Model-View-Presenter将UI代码与其行为分开。 原因:允许testing业务逻辑,而不能testing的部分(UI)被最小化。 不要写静态方法或类。 原因:静态方法很难或不可能被隔离,Rhino Mock无法嘲笑它们。 编程接口,而不是类。 原因:使用接口澄清对象之间的关系。 接口应该定义一个对象在其环境中需要的服务。 此外,使用Rhino Mocks和其他模拟框架可以轻松地模拟界面。 隔离外部依赖。 原因:无法testing未parsing的外部依赖关系。 将虚拟的方法标记为虚拟的方法。 原因:Rhino Mocks无法模拟非虚拟方法。
我已经使用Java Servlets创build了一个Web系统,现在想要进行JUnittesting。 我的dataManager只是将其提交给数据库的基本代码片段。 你将如何用JUnittesting一个Servlet? 我的代码示例,允许用户注册/注册,这是从我的主页通过AJAX提交: public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ // Get parameters String userName = request.getParameter("username"); String password = request.getParameter("password"); String name = request.getParameter("name"); try { // Load the database driver Class.forName("com.mysql.jdbc.Driver"); //pass reg details to datamanager dataManager = new DataManager(); //store result as string String result = dataManager.register(userName, password, […]
我们是否应该为我们的获得者和制定者编写testing或者是否过分矫枉过正?
我正在开始使用Python(现在是时候让我一试了),我正在寻找一些最佳实践。 我的第一个项目是一个在多个线程中运行命令行实验的队列。 我开始得到一个很长的main.py文件,我想分解它。 一般来说,我在找: python程序员如何组织多个源文件? 有没有适合你的特定结构? 我的具体问题包括: 每个class级应该在一个单独的文件? 我应该如何组织相对于源代码的unit testing? 我应该在哪里放置文档注释,特别是那些用于命令行操作的文档? 如果我使用多个目录,我如何导入它们之间的类? 我可以通过反复试验在这里得出我自己的一些结论,但我宁愿从好的事情出发。
我的RSpectesting中有超过2000个示例的Rails应用程序。 不用说,这是一个很大的应用程序,还有很多需要testing的东西。 在这一点上运行这些testing是非常低效的,因为它需要这么长时间,所以在推新版本之前,我们几乎处于不鼓励写它们的地步。 我在spec.opts中添加了-profile来查找最长的运行示例,其中至less有10个平均需要10秒才能运行。 RSpec专家是否正常? 例如10秒完全太长了吗? 我意识到,用2000个例子来说,要彻底地testing所有的东西需要花费不小的时间 – 但是在这一点上4个小时是有点可笑的。 什么样的时候你看到你最长的例子? 我能做些什么来排除现有的规格,以便找出瓶颈并帮助加快速度。 现在每分钟都会有帮助。
更新:添加2017年; VS2017使用与2015年相同的testing发现/运行器集成机制,因此可能出错的关键是相同的。 我读过为什么xUnit runner没有find我的testing,其中涵盖了xUnit 永远无法find你的testing的原因,但是我的问题是不同的 – 我相信我的testing没有什么微妙的变化。 (他们已经在其他环境中工作,这似乎只是我的机器)Visual Studio 2015 [社区版]中的Visual Studiotesting运行器是根本不显示我的任何testing。 我没有做任何令人兴奋的事情。 testing的目标是桌面上的xUnit.net v2。 我查看了输出窗口,在标签的显示输出中没有看到任何东西。
在我们的项目中,我有几个JUnittesting,例如从目录中获取每个文件并对其执行testing。 如果我在TestCase实现了testEveryFileInDirectory方法,那么只会显示一个可能失败或成功的testing。 但是我对每个文件的结果感兴趣。 我怎样才能编写一个TestCase / TestSuite ,使每个文件显示为一个单独的testing,例如在Eclipse的graphics化TestRunner中? (为每个文件编写明确的testing方法不是一种select。) 在Eclipse Testrunner中也将ParameterizedTest与一个名称相比较 。
我试图创build一个UnitTest来validation对象已被删除。 from django.utils import unittest def test_z_Kallie_can_delete_discussion_response(self): …snip… self._driver.get("http://localhost:8000/questions/3/want-a-discussion") self.assertRaises(Answer.DoesNotExist, Answer.objects.get(body__exact = '<p>User can reply to discussion.</p>')) 我不断收到错误: DoesNotExist: Answer matching query does not exist.
我发现的关于TDD的事情是,它需要时间来让你的testing设置和自然懒惰我总是想写尽可能less的代码。 我似乎做的第一件事是testing我的构造函数已经设置了所有的属性,但这是矫枉过正? 我的问题是,你写unit testing在什么级别的粒度? ..有没有一个testing太多的情况?
我的公司一直在评估Spring MVC,以确定我们是否应该在下一个项目中使用它。 到目前为止,我喜欢我所看到的,现在我正在看看Spring Security模块,以确定它是我们可以/应该使用的东西。 我们的安全要求是相当基础的。 用户只需提供用户名和密码即可访问网站的某些部分(如获取有关其帐户的信息); 并且网站上有一些页面(常见问题,支持等),匿名用户应该被授予访问权限。 在我创build的原型中,我一直在Session中为已authentication的用户存储一个“LoginCredentials”对象(它只包含用户名和密码) 例如,一些控制器检查这个对象是否在会话中以获得对login用户名的引用。 我期待用Spring Security取代这个本土化的逻辑,而不是去除任何types的“我们如何跟踪login用户?”的好处。 和“我们如何authentication用户?” 从我的控制器/业务代码。 Spring Security似乎提供了一个(每线程)“上下文”对象,可以从应用程序的任何位置访问用户名/主体信息。 Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); …这似乎是非常像spring一样,因为这个对象是(全局)单身,在某种程度上。 我的问题是:如果这是在Spring Security中访问经过身份validation的用户的信息的标准方法,那么在SecurityContext中注入一个Authentication对象的方法是什么,以便在unit testing需要authentication用户? 我是否需要在每个testing用例的初始化方法中进行连线? protected void setUp() throws Exception { … SecurityContextHolder.getContext().setAuthentication( new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword())); … } 这似乎过于冗长。 有更容易的方法吗? SecurityContextHolder对象本身看起来非常像Spring一样…