Questions tagged «unit-testing»

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

6
Go中的模拟功能
我正在通过编写一个小型个人项目来学习Go。尽管体积很小,但我还是决定进行严格的单元测试,以便从一开始就学习Go的良好习惯。 琐碎的单元测试都很好,很花哨,但是现在我对依赖项感到困惑;我希望能够用模拟函数替换一些函数调用。这是我的代码片段: func get_page(url string) string { get_dl_slot(url) defer free_dl_slot(url) resp, err := http.Get(url) if err != nil { return "" } defer resp.Body.Close() contents, err := ioutil.ReadAll(resp.Body) if err != nil { return "" } return string(contents) } func downloader() { dl_slots = make(chan bool, DL_SLOT_AMOUNT) // Init the …
147 unit-testing  mocking  go 

30
Visual Studio 2013找不到单元测试
我在Visual Studio 2013中有一个简单的解决方案,它由一个Web项目,一个库项目和一个单元测试项目组成。当我打开解决方案并尝试运行单元测试时,Visual Studio不会发现它们。要运行测试,我尝试转到菜单并选择“测试”->“运行”->“运行所有测试”或打开“测试资源管理器”窗口。通过这些方法,Visual Studio不会在解决方案中发现任何测试。 首先创建一个简单的单元测试项目,然后尝试运行测试,Visual Studio知道发现该测试,然后我就可以运行它。然后,如果我打开以前的解决方案,Visual Studio现在会发现所有测试。我尝试保存我的解决方案,但先关闭并重新打开它,而无需先创建单元测试项目,Visual Studio不会再次找到测试。这是一个非常奇怪的行为,我不知道为什么会这样。 我曾经在这个项目中独自工作过,该项目使用的是与Visual Studio Team Foundation集成的源代码控制git。当一个新元素进入项目以及需要通过在线源代码控件重新创建解决方案时,Visual Studio的问题不会发现单元测试开始。在此之前,Visual Studio始终会发现所有测试。 为了创建单元测试,我使用了Microsoft.VisualStudio.QualityTools.UnitTestFramework dll。我的Visual Studio版本是:Microsoft Visual Studio Express 2013,用于Web版本12.0.30723.00更新3。我的.net Framework版本是4.5.50938。 我所有的测试都是这样的: [TestClass] public class Service1Test { [TestMethod] public void Test1() { Assert.IsTrue(True); } }



3
有什么方法可以根据参数修改Jasmine间谍?
我有一个函数要测试,该函数使用不同的参数两次调用外部API方法。我想用Jasmine间谍程序来模拟这个外部API,并根据参数返回不同的东西。茉莉花有什么办法吗?我能想到的最好的方法是使用andCallFake的黑客: var functionToTest = function() { var userName = externalApi.get('abc'); var userId = externalApi.get('123'); }; describe('my fn', function() { it('gets user name and ID', function() { spyOn(externalApi, 'get').andCallFake(function(myParam) { if (myParam == 'abc') { return 'Jane'; } else if (myParam == '123') { return 98765; } }); }); });

11
角度测试失败,无法在“ XMLHttpRequest”上执行“发送”
我正在尝试测试我的angular 4.1.0组件- export class CellComponent implements OnInit { lines: Observable<Array<ILine>>; @Input() dep: string; @Input() embedded: boolean; @Input() dashboard: boolean; constructor( public dataService: CellService, private route: ActivatedRoute, private router: Router, private store: Store<AppStore>) { } } 但是,一个简单的“应该创建”测试将引发此神秘错误... NetworkError:无法在'XMLHttpRequest'上执行'send':无法加载'ng:///DynamicTestModule/module.ngfactory.js'。 所以我发现了这个问题,这表明问题是组件的@Input)_参数没有设置,但是,如果我这样修改测试,则: it('should create', inject([CellComponent], (cmp: CellComponent) => { cmp.dep = ''; cmp.embedded = …

7
pytest:断言几乎相等
如何assert almost equal使用py.test处理浮点数而不求助于以下内容: assert x - 0.00001 <= y <= x + 0.00001 更具体地说,了解一种精巧的解决方案以快速比较浮点对而不用拆开它们将很有用: assert (1.32, 2.4) == i_return_tuple_of_two_floats()

30
测试未在测试资源管理器中运行
我目前正在研究目前有32个单元测试的解决方案。我一直在与reshaper测试运行程序合作-效果很好。所有测试都在运行,所有测试都显示正确的测试结果。现在,一位同事告诉我,使用Visual Studio测试资源管理器无法在其计算机上运行测试。他们在我的机器上都不工作,因此我可以排除一些本地丢失的文件或其他东西。 测试资源管理器将显示所有单元测试,但是一旦单击“全部运行”,所有测试将显示为灰色,并且不显示测试运行的结果: 所有测试课程都是公开的 所有测试类都具有[TestClass]声明的属性 所有测试方法都使用该[TestMethod]属性 生产力代码和测试项目都针对.NET 3.5。 我已经尝试干净的构建我的解决方案,和/或删除所有obj,bin,Debug和Release文件夹 如果有任何提示可能引起这种行为,我将不胜感激。

6
测试抽象类
如何使用PHPUnit测试抽象类的具体方法? 我希望我必须在测试中创建某种对象。但是,我不知道这是否是最佳实践,或者PHPUnit是否允许这样做。


11
如何获取PHPUnit MockObjects以基于参数返回不同的值?
我有一个PHPUnit模拟对象,'return value'无论其参数是什么,它都会返回: // From inside a test... $mock = $this->getMock('myObject', 'methodToMock'); $mock->expects($this->any)) ->method('methodToMock') ->will($this->returnValue('return value')); 我想要做的是根据传递给模拟方法的参数返回一个不同的值。我已经尝试过类似的方法: $mock = $this->getMock('myObject', 'methodToMock'); // methodToMock('one') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('one')) ->will($this->returnValue('method called with argument "one"')); // methodToMock('two') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('two')) ->will($this->returnValue('method called with argument "two"')); 但这会导致PHPUnit抱怨,如果未使用参数调用模拟'two',那么我认为methodToMock('two')覆盖的定义会覆盖第一个的定义。 所以我的问题是:有没有办法让PHPUnit模拟对象根据其参数返回不同的值?如果是这样,怎么办?

6
如何模拟ES6模块的导入?
我有以下ES6模块: network.js export function getDataFromServer() { return ... } widget.js import { getDataFromServer } from 'network.js'; export class Widget() { constructor() { getDataFromServer("dataForWidget") .then(data => this.render(data)); } render() { ... } } 我正在寻找一种使用的模拟实例测试Widget的方法getDataFromServer。如果<script>像Karma中那样使用单独的而不是ES6模块,则可以这样编写测试: describe("widget", function() { it("should do stuff", function() { let getDataFromServer = spyOn(window, "getDataFromServer").andReturn("mockData") let widget = new …

4
Mockito的argumentsCaptor示例
任何人都可以给我提供一个示例,说明如何使用org.mockito.ArgumentCaptor该类以及该类与Mockito附带的简单匹配器有何不同。 我阅读了提供的Mockito文档,但这些文档没有清楚说明,没有一个能够清晰地解释它。

23
单元测试能否成功添加到现有生产项目中?如果是这样,那么它是否值得?
我强烈考虑将单元测试添加到生产中的现有项目中。有人开始18个月前,我才真正看到TDD的任何好处(面对手掌),所以现在有一些项目一个相当大的解决方案,我一点都不知道知道哪里在添加单元测试开始。让我考虑的是,偶尔会出现一个老错误,或者将某个错误检查为已修复而没有真正修复。单元测试将减少或防止这些问题的发生。 通过阅读关于SO的类似问题,我看到了一些建议,例如从Bug跟踪程序开始,为每个Bug编写测试用例,以防止回归。但是,我担心如果我一开始就使用TDD,最终会错过总体情况,最终会错过一些基本测试。 是否应遵循任何流程/步骤,以确保对现有解决方案进行正确的单元测试,而不是仅仅纳入其中?我如何确保测试的质量很好,而不是任何测试的情况都比没有测试好。 所以我想我也是在问: 为生产中的现有解决方案付出努力值得吗? 更好地忽略此项目的测试并在将来可能的重写中添加它吗? 什么会更有益;花几个星期添加测试还是几个星期添加功能? (显然,第三点的答案完全取决于您是在与管理人员还是开发人员对话) 赏金理由 增加赏金以尝试吸引更多答案,这不仅证实了我现有的怀疑,认为这是一件好事,而且也有一些反对的理由。 我的目的是稍后在正反两面写下这个问题,以试图向管理层表明,花很多工夫将产品的未来开发转移到TDD上是值得的。我想在没有我自己偏见的情况下应对这一挑战并发展我的推理。

11
使用Spring Security进行单元测试
我公司一直在评估Spring MVC,以确定我们是否应该在我们的下一个项目中使用它。到目前为止,我喜欢我所看到的内容,现在,我正在研究Spring Security模块,以确定是否可以/应该使用它。 我们的安全要求非常基本。用户只需要能够提供用户名和密码即可访问网站的某些部分(例如获取有关其帐户的信息);并且网站上的页面很少(常见问题解答,支持等),应该为匿名用户提供访问权限。 在我创建的原型中,我已经在Session中为经过身份验证的用户存储了一个“ LoginCredentials”对象(其中仅包含用户名和密码)。例如,某些控制器检查此对象是否在会话中,以获取对登录用户名的引用。我正在寻找用Spring Security替换这种自生的逻辑,这将具有消除“我们如何跟踪已登录用户的方式”的好处。和“我们如何验证用户身份?” 从我的控制器/业务代码。 看来Spring Security提供了(每个线程)“上下文”对象,以便能够从您应用程序中的任何位置访问用户名/主要信息... Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); ...在某种程度上似乎很不像Spring,因为该对象是一个(全局)单例。 我的问题是这样的:如果这是在Spring Security中访问有关已认证用户的信息的标准方法,那么将Authentication对象注入SecurityContext的可接受的方法是什么,以便当单元测试需要一个认证用户? 我是否需要在每个测试用例的初始化方法中进行连接? protected void setUp() throws Exception { ... SecurityContextHolder.getContext().setAuthentication( new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword())); ... } 这似乎太冗长了。有更容易的方法吗? 该SecurityContextHolder对象本身看起来非常不像Spring ...

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.