Questions tagged «unit-testing»

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

9
Mockito。验证方法参数
我已经对此进行了谷歌搜索,但是没有发现任何相关信息。我有这样的事情: Object obj = getObject(); Mockeable mock= Mockito.mock(Mockeable.class); Mockito.when(mock.mymethod(obj )).thenReturn(null); Testeable testableObj = new Testeable(); testableObj.setMockeable(mock); command.runtestmethod(); 现在,我要验证的mymethod(Object o)是内部runtestmethod()调用了,是通过Object调用的o,而不是其他对象。但是无论我进行哪种验证,我都会始终通过测试,例如: Mockito.verify(mock.mymethod(Mockito.eq(obj))); 要么 Mockito.verify(mock.mymethod(Mockito.eq(null))); 要么 Mockito.verify(mock.mymethod(Mockito.eq("something_else"))); 我总是通过考试。我如何完成该验证(如果可能)? 谢谢。


30
在Visual Studio 2017中未发现单元测试
自从安装VS 2017以来,我一直在努力。现在看来,单元测试只能从命令行“ dotnet测试”运行。 我的项目是.NET Core 1.1.1。我安装了1.1.1的SDK和框架更新。 我已经在MSDN(https://msdn.microsoft.com/en-us/library/ms182532.aspx)上尝试了该示例,该示例也以完全相同的方式失败。 用于测试和主项目的所有NuGet软件包都是最新的。测试项目和主项目都可以正确构建。可以从命令行成功运行测试。 有没有人获得过在VS 2017中运行的单元测试,如果可以的话如何? 谢谢,约翰 更新-扩展 这是一个无法在GitHub上运行的简单测试项目的示例。这是xUnit的示例,但我尝试了NUnit和内置于MS测试中的visual studio。无论我进行什么测试或进行什么更改,我都无法让VS测试跑步者找到任何测试。 我尝试过的 删除VS测试缓存文件 DEL %TEMP%\VisualStudioTestExplorerExtensions 重新启动VS 关闭/打开测试浏览器 对于已安装的xUnit Microsoft.DotNet.InternalAbstractions(请参见SO post) 对于NUnit,请确保已安装适配器,并且与NUnit软件包具有相同的版本(3) test -> test settings -> default processor architecture 设置为x86 问题 任何人都可以在VS2017(.csproj项目文件)中提供.Net Core 1.1.0解决方案的工作示例,在该示例中VS测试浏览器成功找到了单元测试,或者在给出的示例中向我展示了问题。


15
Angular 2单元测试:找不到名称“描述”
我正在从angular.io关注本教程 正如他们所说,我已经创建了hero.spec.ts文件来创建单元测试: import { Hero } from './hero'; describe('Hero', () => { it('has name', () => { let hero: Hero = {id: 1, name: 'Super Cat'}; expect(hero.name).toEqual('Super Cat'); }); it('has id', () => { let hero: Hero = {id: 1, name: 'Super Cat'}; expect(hero.id).toEqual(1); }); }); 单元测试就像一个魅力。问题是:我看到一些错误,这些错误在教程中提到: 我们的编辑器和编译器可能会抱怨他们不知道是什么it ,expect因为它们缺少描述Jasmine的键入文件。我们现在可以忽略那些烦人的投诉,因为它们是无害的。 他们确实忽略了它。即使这些错误是无害的,当我收到很多错误时,在我的输出控制台中看起来也不是很好。 …

20
什么是单元测试?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 11个月前关闭。 改善这个问题 我看到许多问题询问“如何”以特定语言进行单元测试,但没有问题询问“什么”,“为什么”和“何时”。 它是什么? 它对我有什么作用? 我为什么要使用它? 我什么时候应该使用它? 有哪些常见的陷阱和误解

4
Mockito验证方法调用的顺序/顺序
有没有一种方法可以验证在Mockito中是否曾经methodOne调用过methodTwoa? public class ServiceClassA { public void methodOne(){} } public class ServiceClassB { public void methodTwo(){} } public class TestClass { public void method(){ ServiceClassA serviceA = new ServiceClassA(); ServiceClassB serviceB = new ServiceClassB(); serviceA.methodOne(); serviceB.methodTwo(); } }


30
单元测试反模式目录
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 反模式:必须至少存在两个关键要素,才能将实际的反模式与简单的坏习惯,坏习惯或坏主意正式区分开: 某些重复的动作,过程或结构模式似乎最初是有益的,但最终会产生比有益结果更多的不良后果,并且 重构的解决方案已明确记录在案,并在实践中得到证明,并且可重复。 投票一次您在“野外”看到的TDD反模式太多了。 詹姆斯·卡尔(James Carr)的博客文章以及 有关测试驱动开发yahoogroup的相关讨论 如果您找到了一个“未命名”的人。每个反模式请发表一篇文章,以使投票数有所作为。 我的既得利益是找到前n个子集,以便我可以在不久的将来在午餐会上讨论'em'。

7
单元测试有哪些流行的命名约定?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 一般 所有测试均遵循相同的标准。 明确每个测试状态是什么。 明确预期的行为。 例子 1)MethodName_StateUnderTest_ExpectedBehavior Public void Sum_NegativeNumberAs1stParam_ExceptionThrown() Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown () Public void Sum_simpleValues_Calculated () 资料来源:单元测试的命名标准 2)用下划线分隔每个单词 Public void Sum_Negative_Number_As_1st_Param_Exception_Thrown() Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown () Public void Sum_Simple_Values_Calculated () 其他 用Test结束方法名称 以类名开头的方法名

5
如何告诉Mockito模拟对象在下次调用时返回不同的内容?
因此,我正在像这样在类级别上将模拟对象创建为静态变量...在一个测试中,我想Foo.someMethod()返回某个值,而在另一个测试中,我希望它返回一个不同的值。我遇到的问题是,似乎我需要重建模拟才能使其正常工作。我想避免重建模拟,只在每个测试中使用相同的对象。 class TestClass { private static Foo mockFoo; @BeforeClass public static void setUp() { mockFoo = mock(Foo.class); } @Test public void test1() { when(mockFoo.someMethod()).thenReturn(0); TestObject testObj = new TestObject(mockFoo); testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value } @Test public void test2() { when(mockFoo.someMethod()).thenReturn(1); TestObject testObj = new TestObject(mockFoo); …

6
何时使用Mockito.verify()?
我为3个目的编写jUnit测试用例: 为确保我的代码在所有(或大部分)输入组合/值下满足所有必需的功能。 为了确保可以更改实现,并依靠JUnit测试用例告诉我,我的所有功能仍然令人满意。 作为所有用例的文档,我的代码将处理这些代码,并充当重构的规范-如果需要重写代码。(重构代码,如果我的jUnit测试失败-您可能错过了一些用例)。 我不明白为什么或何时Mockito.verify()使用。当我看到verify()被调用时,它告诉我我的jUnit正在意识到实现。(即使我的功能不受影响,更改我的实现也会破坏jUnits)。 我在找: 正确使用的准则应该是什么Mockito.verify()? jUnits知道或紧密关联被测类的实现在本质上是正确的吗?

10
覆盖Junit Test中的默认Spring-Boot application.properties设置
我有一个Spring-Boot应用程序,其中默认属性application.properties在类路径(src / main / resources / application.properties)中的文件中设置。 我想用test.properties文件中声明的属性(src / test / resources / test.properties)覆盖我的JUnit测试中的一些默认设置。 我通常为Junit测试提供专用的Config类,例如 package foo.bar.test; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import(CoreConfig.class) @EnableAutoConfiguration public class TestConfig { } 我首先认为@PropertySource("classpath:test.properties")在TestConfig类中使用将可以解决问题,但是这些属性不会覆盖application.properties设置(请参阅Spring-Boot参考文档-23 .外部化配置)。 然后我尝试-Dspring.config.location=classpath:test.properties在调用测试时使用。那很成功-但我不想为每次测试执行都设置此系统属性。因此我把它放在代码中 @Configuration @Import(CoreConfig.class) @EnableAutoConfiguration public class TestConfig { static { System.setProperty("spring.config.location", "classpath:test.properties"); } } 不幸的是再次失败。 关于如何application.properties使用test.properties我必须忽略的JUnit测试中的设置,必须有一个简单的解决方案。

16
Java:如何测试调用System.exit()的方法?
我有一些应调用System.exit()某些输入的方法。不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新的Thread中似乎无济于事,因为System.exit()终止JVM不仅终止当前线程。有什么通用的模式可以处理吗?例如,我可以用存根替换System.exit()吗? [编辑]有问题的类实际上是我要在JUnit中测试的命令行工具。也许JUnit根本不是适合该工作的工具?欢迎提出补充回归测试工具的建议(最好是与JUnit和EclEmma很好地集成在一起的工具)。

5
Mockito-doReturn()和when()之间的区别
我目前正在使用Mockito在Spring MVC应用程序中模拟我的服务层对象,在该应用程序中我想测试我的Controller方法。但是,当我阅读Mockito的细节时,我发现这些方法doReturn(...).when(...)等效于when(...).thenReturn(...)。所以,我的问题是,拥有两种做同一件事的方法有什么意义?doReturn(...).when(...)和之间的细微差别是when(...).thenReturn(...)什么? 任何帮助,将不胜感激。

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.