Questions tagged «unit-testing»

单元测试是一种测试源代码的各个单元以确定它们是否适合使用的方法。

3
GoogleTest与CppUnit:事实
在接下来的几年中设置C ++单元测试框架的过程中,我们选择了GoogleTest和CppUnit。我对两者都有一定的经验,我的首选是GoogleTest。无论如何说服我的老板我需要一些事实,所以我在互联网上做了一些阅读,包括手册,维基页面和一些资源。我想出了GoogleTest优势和一个CppUnit优势(图形测试运行程序)的列表。在这里,它们按感知的有用性排序: INSTANTIATE_TEST_CASE_P用您想要的任何参数集(包括笛卡尔乘积)实例化测试用例 FRIEND_TEST,用于测试私有类成员(适用于所有旧版代码) 将断言变成断点 非致命断言 “开箱即用” googlemock集成 自动测试检测,无需枚举 可以禁用和启用测试 可以使用名称模式选择要运行的测试 值/类型参数化测试 用户定义的谓词断言 死亡测试 更加丰富的断言 类型断言 在子程序上断言 可以使用<<将其他调试信息添加到断言中 RecordProperty向XML输出发出属性的最后一个值 SCOPED_TRACE帮助理解断言失败的上下文,该断言来自子例程或循环内部。 Jenkins可以立即显示xUnit XML输出,而无需在两者之间进行XSLT转换 支持自定义类型的打印机 测试指示所消耗的时间(我怀疑这对于CppUnit也可行,但我还没有弄清楚) 测试事件侦听器API(用户定义的插件) 测试改组 没有例外,RTTI 我假设CppUnit不支持以上所有内容是否正确?是否有一个有用的功能GoogleTest无法在CppUnit的我失踪? 最后但并非最不重要的一点:GoogleTest是否缺少任何出色的CppUnit功能? 谢谢!


10
模拟Java枚举以添加值以测试失败情况
我有一个或多或少像这样的枚举开关: public static enum MyEnum {A, B} public int foo(MyEnum value) { switch(value) { case(A): return calculateSomething(); case(B): return calculateSomethingElse(); } throw new IllegalArgumentException("Do not know how to handle " + value); } 并且我希望测试涵盖所有行,但是由于期望代码能够处理所有可能性,因此如果没有在开关中使用其相应的case语句,则无法提供值。 扩展枚举以添加额外的值是不可能的,并且仅模拟equals方法返回false也不会起作用,因为生成的字节码使用了幕后的跳转表来进行适当处理...所以我想使用PowerMock之类的东西也许可以实现一些黑魔法。 谢谢! 编辑: 当我拥有枚举时,我以为我可以在值上添加一个方法,从而完全避免切换问题。但是我仍然要提这个问题,因为它仍然很有趣。

5
使用Python Mock模拟功能
我正在尝试Mock使用python模拟模块的函数(返回一些外部内容)。 我在导入模块的模拟函数时遇到了一些麻烦。 例如,在util.py我有 def get_content(): return "stuff" 我想嘲笑,util.get_content以便它返回其他内容。 我正在尝试: util.get_content=Mock(return_value="mocked stuff") 如果get_content在另一个模块中被调用,它实际上似乎永远不会返回模拟对象。我在使用方法方面缺少什么Mock吗? 请注意,如果我调用以下内容,则一切正常: >>> util.get_content=Mock(return_value="mocked stuff") >>> util.get_content() "mocked stuff" 但是,如果get_content从另一个模块内部调用,它将调用原始函数而不是模拟版本: >>> from mymodule import MyObj >>> util.get_content=Mock(return_value="mocked stuff") >>> m=MyObj() >>> m.func() "stuff" 内容 mymodule.py from util import get_content class MyObj: def func(): get_content() 所以我想我的问题是-如何从我调用的模块内部调用函数的模拟版本? 看来,这from module import function可能归咎于此,因为它没有指向Mocked函数。

2
如何在HttpRequestMessage上模拟CreateResponse <T>扩展方法
我正在使用ASP.Net MVC 4 RC的ApiController,并且正在尝试对GET方法进行单元测试。 此方法使用上的CreateResponse&lt;T&gt;方法HttpRequestMessage,但我不知道如何模拟此方法或使其正常运行。 该方法的主体包含以下内容: MediaTypeHeaderValue header = new MediaTypeHeaderValue(versionedSmartBlock.ContentType); var response = Request.CreateResponse&lt;SmartBlock&gt;( HttpStatusCode.OK, versionedSmartBlock, header); 在单元测试中,我创建一个空的HttpRequestMessage: CallsController api = new CallsController( managerMock.Object, config, adapterFactoryMock.Object); api.Request = new HttpRequestMessage( HttpMethod.Get, "http://localhost/Initiate?ern=%2B44123456789"); var response = api.Get("+44123456789", null); 但这只会生成一个InvalidOperationException: 该请求没有关联的配置对象,或者提供的配置为空。 有没有人知道如何配置,HttpRequestMessage以便该CreateResponse方法真正发挥作用?

5
在Maven的某些模块中跳过测试
我希望我的Maven构建可以运行大多数单元测试。但是,在一个项目中有一些单元测试比较慢,因此我希望将它们排除在外。并偶尔将它们打开。 问题:我该怎么做? 我知道-Dmaven.test.skip=true,但这会关闭所有单元测试。 我也知道跳的集成测试,描述在这里。但是我没有集成测试,只有单元测试,也没有对maven-surefire-plugin的任何明确调用。(我将Maven 2与Eclipse-Maven插件一起使用)。

7
模拟Asp.net-mvc控制器上下文
因此,控制器上下文取决于一些asp.net内部。有什么方法可以完全模拟这些以进行单元测试?当我只需要,例如Request.HttpMethod返回“ GET”时,似乎很容易用大量设置阻塞测试。 我已经在网上看到了一些例子/帮助者,但其中有些是过时的。认为这将是保持最新和最佳状态的好地方。 我正在使用最新版本的犀牛模拟

5
如何为Spring Boot Controller端点编写单元测试
我有一个带有以下内容的示例Spring Boot应用程序 引导主类 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } 控制者 @RestController @EnableAutoConfiguration public class HelloWorld { @RequestMapping("/") String gethelloWorld() { return "Hello World!"; } } 为控制器编写单元测试的最简单方法是什么?我尝试了以下操作,但它抱怨无法自动连接WebApplicationContext @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = DemoApplication.class) public class DemoApplicationTests { final String BASE_URL = "http://localhost:8080/"; @Autowired private WebApplicationContext …

6
如何在Powershell中进行TDD和单元测试?
随着MS将Powershell应用于所有新服务器产品中,我开始(勉强地)认为我需要认真对待它。TDD是“认真对待”的一部分。您是否找到了对Power Shell脚本进行单元测试的好方法? 我从极客噪声先生那里找到了嘲笑的样本-但我真的很喜欢RhinoMocks之类的东西。Brian Hartsock有一个来自MS Test的对Powershell字符串进行运行测试的示例。有点骇人听闻,但似乎可行。 我想要的是Powershell TDD体验,就像“真实”语言一样干净。 更新以澄清: 前两个答案试图使我远离测试Powershell。意见很有趣。我不想知道在Powershell中测试是否是个好主意。这是一个主观的问题,应该在其他论坛中提出。我想要一个对Powershell进行单元测试的解决方案。如果您认为这是个坏主意(可能是),请将其视为一个有趣的学术问题。 是的,脚本语言将不同的系统粘合在一起。但是,正如已经指出的那样,以动态语言模拟和破坏接缝也很容易。 我不是在问“调试”。调试是一个非常有用的主题。我让别人问。 也许PS脚本应该很简单。该语言支持模块化,并且不可避免地会在PS中实现复杂的流程(即使是一个不好的主意)。 这个问题的答案不是“您不能”。我可以看到(从链接的博客-有点旧了),有些人在解决该问题上取得了进展。 重新说明一下:如何以xUnit样式实现Powershell逻辑的自动化测试? 集成测试很有趣,而打破依赖关系的单元测试最有趣。

19
单元测试的采用
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 我们已经尝试将单元测试引入当前的项目中,但是似乎没有用。额外的代码似乎已经成为维护工作的头疼问题,因为当内部框架发生更改时,我们必须四处解决并修复所有与之相关的单元测试。 我们有一个用于对控制器进行单元测试的抽象基类,它充当调用子类的抽象方法实现的模板,即,框架调用Initialize,因此我们的控制器类都有自己的Initialize方法。 我曾经是单元测试的拥护者,但是它似乎不适用于我们当前的项目。 谁能帮助您确定问题以及我们如何使单元测试对我们有用而不是不利于我们?


6
使用Java 8 Clock对类进行单元测试
引入了Java 8 java.time.Clock,可以将其用作许多其他java.time对象的参数,从而使您可以向其中注入真实或虚假的时钟。例如,我知道您可以创建一个Clock.fixed()然后调用Instant.now(clock),它将返回Instant您提供的固定内容。这听起来很适合单元测试! 但是,我很难弄清楚如何最好地使用它。我有一个课,类似于以下内容: public class MyClass { private Clock clock = Clock.systemUTC(); public void method1() { Instant now = Instant.now(clock); // Do something with 'now' } } 现在,我要对该代码进行单元测试。我需要能够设置clock固定的时间,以便可以method()在不同的时间进行测试。显然,我可以使用反射将clock成员设置为特定值,但是如果我不必求助于反射,那就太好了。我可以创建一个公共setClock()方法,但这感觉不对。我不想Clock在方法中添加参数,因为真正的代码不必关心传递时钟。 处理此问题的最佳方法是什么?这是新代码,因此我可以重新组织该类。 编辑:为澄清起见,我需要能够构造一个MyClass对象,但必须能够使一个对象看到两个不同的时钟值(好像是常规系统时钟一样)。因此,我无法将固定时钟传递给构造函数。

2
在Moq Callback()调用中设置变量值
我想我可能对Moq回调方法的语法有些困惑。当我尝试做这样的事情: IFilter filter = new Filter(); List&lt;IFoo&gt; objects = new List&lt;IFoo&gt; { new Foo(), new Foo() }; IQueryable myFilteredFoos = null; mockObject.Setup(m =&gt; m.GetByFilter(It.IsAny&lt;IFilter&gt;())) .Callback( (IFilter filter) =&gt; myFilteredFoos = filter.FilterCollection(objects)) .Returns(myFilteredFoos.Cast&lt;IFooBar&gt;()); 抛出异常,因为myFilteredFoos在Cast&lt;IFooBar&gt;()调用期间为null 。这不是我期望的那样吗?我认为FilterCollection会被调用,然后myFilteredFoos将为非null并允许强制转换。 FilterCollection不能返回空值,这使我得出不被调用的结论。另外,当我这样声明时myFilteredFoos: Queryable myFilteredFoos; Return调用抱怨myFilteredFoos可能在初始化之前使用。
69 c#  .net  unit-testing  mocking  moq 

2
如何为Django视图编写单元测试?
我在理解应该如何为Django设计单元测试方面遇到问题。 从我的理解来看,一次性测试整个视图似乎是不可能的。我们需要区分请求的发布前和发布后状态。但是我不知道该如何设计。有没有现实生活中的例子? 查看文档,这些示例过于简化,仅关注模型。 @login_required def call_view(request, contact_id): profile = request.user.get_profile() if request.POST: form = CallsForm(profile.company, request.POST) if form.is_valid() return HttpResponseRedirect('/contact/' + contact_id + '/calls/') else: form = CallsForm(profile.company, instance=call) variables = RequestContext(request, {'form':form} return render_to_response('conversation.html', variables) 更新: 尝试使成功的测试工作成功,但仍然失败: def test_contact_view_success(self): # same again, but with valid data, then self.client.login(username='username1', password='password1') …


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.