Questions tagged «unit-testing»

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

14
Java的最佳模拟框架是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在Java中创建模拟对象的最佳框架是什么?为什么?每个框架的优缺点是什么?

7
对数据库驱动的应用程序进行单元测试的最佳策略是什么?
我使用由后端复杂程度各异的数据库驱动的许多Web应用程序。通常,有一个与业务和表示逻辑分开的ORM层。这使得对业务逻辑进行单元测试相当简单。事情可以在离散模块中实现,并且测试所需的任何数据都可以通过对象模拟来伪造。 但是测试ORM和数据库本身始终充满问题和妥协。 多年来,我尝试了一些策略,但没有一个完全令我满意。 用已知数据加载测试数据库。针对ORM运行测试,并确认返回正确的数据。此处的缺点是测试数据库必须跟上应用程序数据库中的所有架构更改,并且可能不同步。它还依赖于人工数据,并且可能不会暴露由于愚蠢的用户输入而发生的错误。最后,如果测试数据库很小,它将不会像索引丢失那样显示低效率。(好吧,最后一个并不是真正的单元测试应该使用什么,但这没有什么害处。) 加载生产数据库的副本并对此进行测试。这里的问题是您可能在任何给定时间都不知道生产数据库中的内容。如果数据随时间变化,则可能需要重写测试。 有人指出,这两种策略都依赖于特定的数据,并且单元测试应该仅测试功能。为此,我看到了建议: 使用模拟数据库服务器,并仅检查ORM是否正在响应给定方法调用而发送正确的查询。 您使用了哪些策略来测试数据库驱动的应用程序(如果有)?什么对您最有效?




4
如何告诉Moq返回任务?
我有一个接口声明 Task DoSomethingAsync(); 我正在使用MoqFramework进行测试: [TestMethod()] public async Task MyAsyncTest() { Mock<ISomeInterface> mock = new Mock<ISomeInterface>(); mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> }); ... } 然后在测试中,我执行调用的代码await DoSomethingAsync()。测试只是失败了。我究竟做错了什么?


15
如何在目录中运行所有Python单元测试?
我有一个目录,其中包含我的Python单元测试。每个单元测试模块的形式为test _ *。py。我正在尝试制作一个名为all_test.py的文件,您猜对了,它将以上述测试形式运行所有文件并返回结果。到目前为止,我已经尝试了两种方法。都失败了。我将展示这两种方法,并希望那里的人知道如何正确地正确执行此操作。 对于我的第一次英勇尝试,我想:“如果我只是将所有测试模块导入文件中,然后调用此unittest.main()doodad,它将起作用,对吗?” 好吧,原来我错了。 import glob import unittest testSuite = unittest.TestSuite() test_file_strings = glob.glob('test_*.py') module_strings = [str[0:len(str)-3] for str in test_file_strings] if __name__ == "__main__": unittest.main() 这没有用,我得到的结果是: $ python all_test.py ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK 对于第二次尝试,我还是可以,也许我会尝试以“手动”方式进行整个测试。所以我尝试在下面这样做: import glob import unittest testSuite = unittest.TestSuite() test_file_strings = glob.glob('test_*.py') module_strings …

20
集成测试和单元测试有什么区别?
我知道单元测试和集成测试的所谓教科书定义。我很好奇的是什么时候编写单元测试了……我将编写它们以涵盖尽可能多的类集。 例如,如果我有一个Word课程,我将为该Word课程编写一些单元测试。然后,我开始编写Sentence类,并在需要与Word该类进行交互时,经常编写我的单元测试,以便它们同时对... Sentence和Word...至少在它们进行交互的位置进行测试。 这些测试是否实质上已经成为集成测试,因为它们现在测试这两个类的集成,还是仅仅是跨越两个类的单元测试? 总的来说,由于这条线的不确定性,我很少实际编写集成测试……或者是我使用最终产品来查看所有部件在实际的集成测试中是否都能正常工作,即使它们是手动的并且很少超出范围每个特征? 我是误解了集成测试,还是集成测试和单元测试之间的区别真的很小?

4
Mockito可以在不考虑参数的情况下对方法进行存根吗?
我正在尝试使用Mockito测试一些旧代码。 我想存根FooDao在生产中使用的a ,如下所示: foo = fooDao.getBar(new Bazoo()); 我可以写: when(fooDao.getBar(new Bazoo())).thenReturn(myFoo); 但是明显的问题是,getBar()从来没有使用与Bazoo我存根方法相同的对象来调用它。(请该new运算符!) 如果我可以以不myFoo考虑参数的方式返回该方法的方法来对它进行存根,我将非常喜欢。失败的话,我会听取其他解决方法的建议,但我真的想避免更改生产代码,直到有合理的测试范围为止。

30
公开私有方法以对其进行单元测试……好主意?
主持人注意: 这里已经发布了39个答案(有些已经删除)。 你发布之前你的答案,考虑你是否能添加一些有意义的讨论。您很有可能只是重复别人已经说过的话。 我偶尔会发现自己需要在类中公开一个私有方法,只是为此编写了一些单元测试。 通常这是因为该方法包含该类中其他方法之间共享的逻辑,并且可以更轻松地自行测试该逻辑,或者另一个原因可能是我想测试同步线程中使用的逻辑而不必担心线程问题。 其他人是否发现自己这样做,因为我真的不喜欢这样做?我个人认为,好处超过了公开方法的问题,而该方法实际上并没有提供课堂以外的任何服务。 更新 谢谢大家的回答,似乎引起了人们的兴趣。我认为,普遍的共识是应该通过公共API进行测试,因为这是使用类的唯一方法,我对此表示同意。我在上面提到的几个我在上面会做的情况并不常见,我认为这样做的好处是值得的。 但是,我可以看到每个人都指出,它永远不会真正发生。而且,当我多考虑一下时,我认为更改代码以容纳测试是一个坏主意-毕竟,我认为测试在某种程度上是一种支持工具,并且如果愿意的话,将系统更改为“支持支持工具”是公然的。坏习惯。
301 c#  java  unit-testing 


10
C ++单元测试框架的比较
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我知道关于C ++单元测试框架的建议已经存在一些问题,但是所有答案都无济于事,因为他们只是推荐了其中一种框架,但没有提供有关(功能)比较的任何信息。 我认为最有趣的框架是CppUnit,Boost和新的Google测试框架。有人做过比较吗?

9
如何正确断言pytest中引发了异常?
码: # coding=utf-8 import pytest def whatever(): return 9/0 def test_whatever(): try: whatever() except ZeroDivisionError as exc: pytest.fail(exc, pytrace=True) 输出: ================================ test session starts ================================= platform linux2 -- Python 2.7.3 -- py-1.4.20 -- pytest-2.5.2 plugins: django, cov collected 1 items pytest_test.py F ====================================== FAILURES ====================================== ___________________________________ test_whatever ____________________________________ def test_whatever(): …

10
在C#中对私有方法进行单元测试
Visual Studio允许通过自动生成的访问器类对私有方法进行单元测试。我已经编写了一个测试成功的私有方法的测试,但是在运行时失败。相当简单的代码版本和测试是: //in project MyProj class TypeA { private List<TypeB> myList = new List<TypeB>(); private class TypeB { public TypeB() { } } public TypeA() { } private void MyFunc() { //processing of myList that changes state of instance } } //in project TestMyProj public void MyFuncTest() { TypeA_Accessor target …
291 c#  unit-testing 

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.