Questions tagged «unit-testing»

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

3
为什么不能识别“异步无效”单元测试?
async void 单元测试不能在Visual Studio 2012中运行: [TestClass] public class MyTestClass { [TestMethod] public async void InvisibleMyTestMethod() { await Task.Delay(1000); Assert.IsTrue(true); } } 如果要进行异步单元测试,则测试方法必须返回Task: [TestMethod] public async Task VisibleMyTestMethod() { await Task.Delay(1000); Assert.IsTrue(true); } 为什么会这样呢?并不是说我绝对需要一种async void测试方法,我只是很好奇。async void即使无法运行,Visual Studio 2012在构建测试方法时也不会发出警告或错误。

8
一个单元应该如何测试hashCode-equals合同?
简而言之,根据Java的object.hashCode(),hashCode契约: 除非影响equals()的内容发生变化,否则哈希码不应更改 equals()表示哈希码== 让我们假设主要是对不可变数据对象感兴趣-它们的信息在构造之后就不会改变,因此假定#1保持不变。留下#2:问题仅仅是确认是否等于隐含哈希码==之一。 显然,除非该集合很小,否则我们无法测试每个可能的数据对象。那么,编写可能会遇到常见情况的单元测试的最佳方法是什么? 由于此类的实例是不可变的,因此构造此类对象的方法有限。如果可能,此单元测试应涵盖所有这些内容。在我头顶上,切入点是子类的构造函数,反序列化和构造函数(应简化为构造函数调用问题)。 [我将尝试通过研究回答自己的问题。来自其他StackOverflowers的输入是此过程中受欢迎的安全机制。] [这可能适用于其他OO语言,因此我要添加该标签。]
79 java  unit-testing  oop 

6
在node.js中模拟数据库?
我如何在我的node.js应用程序中模拟数据库,在本例mongodb中将其用作博客REST API的后端? 当然,我可以将数据库设置为特定的testing数据库,但是我仍然会保存数据,不仅要测试我的代码,还要测试数据库,所以我实际上不是在进行单元测试,而是在进行集成测试。 那该怎么办?创建数据库包装程序作为应用程序和数据库之间的中间层,并在测试时替换DAL? // app.js var express = require('express'); app = express(), mongo = require('mongoskin'), db = mongo.db('localhost:27017/test?auto_reconnect'); app.get('/posts/:slug', function(req, res){ db.collection('posts').findOne({slug: req.params.slug}, function (err, post) { res.send(JSON.stringify(post), 200); }); }); app.listen(3000); // test.js r = require('requestah')(3000); describe("Does some testing", function() { it("Fetches a blogpost by slug", function(done) { …

10
如何测试Python 3.4异步代码?
使用Python 3.4asyncio库编写代码的单元测试的最佳方法是什么?假设我要测试一个TCP客户端(SocketConnection): import asyncio import unittest class TestSocketConnection(unittest.TestCase): def setUp(self): self.mock_server = MockServer("localhost", 1337) self.socket_connection = SocketConnection("localhost", 1337) @asyncio.coroutine def test_sends_handshake_after_connect(self): yield from self.socket_connection.connect() self.assertTrue(self.mock_server.received_handshake()) 当使用默认测试运行程序运行此测试用例时,测试将始终成功,因为该方法仅执行到第一yield from条指令为止,然后在执行任何断言之前返回该指令。这导致测试始终成功。 是否有一个预构建的测试运行器能够处理这样的异步代码?

6
如何对Django邮件进行单元测试?
在我的django应用程序中,我试图编写一个执行操作然后在响应中检查消息的单元测试。 据我所知,没有很好的方法可以做到这一点。 我正在使用CookieStorage存储方法,并且想要执行以下操作: response = self.client.post('/do-something/', follow=True) self.assertEquals(response.context['messages'][0], "fail.") 问题是,我得到的只是一个 print response.context['messages'] <django.contrib.messages.storage.cookie.CookieStorage object at 0x3c55250> 我怎样才能将其变成有用的东西,或者我做错了一切? 谢谢,丹尼尔

7
如何在单元测试之间重置EF7 InMemory提供程序?
我正在尝试使用EF7 InMemory提供程序进行单元测试,但是两次测试之间InMemory数据库的持久性导致我遇到问题。 以下代码演示了我的问题。一个测试将起作用,而另一个测试将始终失败。即使我在两次测试之间将_context设置为null,第二次测试运行仍将始终包含4条记录。 [TestClass] public class UnitTest1 { private SchoolContext _context; [TestInitialize] public void Setup() { Random rng = new Random(); var optionsBuilder = new DbContextOptionsBuilder<SchoolContext>(); optionsBuilder.UseInMemoryDatabase(); _context = new SchoolContext(optionsBuilder.Options); _context.Students.AddRange( new Student { Id = rng.Next(1,10000), Name = "Able" }, new Student { Id = rng.Next(1,10000), Name = …

3
用补丁模拟两个功能进行单元测试
我有一个要单元测试的功能,其中包含调用其他两个功能的功能。我不确定如何使用补丁同时模拟两个函数。我在下面提供了我的意思的示例。当我进行鼻子测试时,测试通过了,但是我觉得必须有一种更清洁的方法来进行测试,而我实际上并不了解有关f.close()的内容。 目录结构如下所示: program/ program/ data.py tests/ data_test.py data.py: import cPickle def write_out(file_path, data): f = open(file_path, 'wb') cPickle.dump(data, f) f.close() data_test.py: from mock import MagicMock, patch def test_write_out(): path = '~/collection' mock_open = MagicMock() mock_pickle = MagicMock() f_mock = MagicMock() with patch('__builtin__.open', mock_open): f = mock_open.return_value f.method.return_value = path with …


11
在鼻子下面测试Python代码时应如何验证日志消息?
我正在尝试编写一个简单的单元测试,该测试将验证在特定条件下我的应用程序中的类将通过标准日志记录API记录错误。我想不出最干净的方法来测试这种情况。 我知道鼻子已经通过它的日志记录插件捕获了日志输出,但这似乎旨在作为失败测试的报告和调试辅助工具。 我可以看到两种方法: 以零散方式(mymodule.logging =模拟日志模块)或使用适当的模拟库来模拟日志记录模块。 编写或使用现有的鼻子插件捕获输出并进行验证。 如果我采用前一种方法,那么我想知道在嘲笑日志记录模块之前将全局状态重置为原来状态的最干净方法是什么。 期待您对此的提示和技巧...

9
在Visual Studio中控制单元测试的执行顺序
好的,我已经完成了有关此内容的搜索。我有一系列的单元测试,它们调用一个静态类,该类一旦初始化,就设置不能(或我不希望)更改的属性。 我的问题是我无法强制执行测试的预定顺序。如果可以的话,我可以以可靠的方式设置静态属性的方式运行它们,并且可以对它们进行断言,但不幸的是,Microsoft.VisualStudio.TestTools.UnitTesting框架只是以看似随机的顺序运行它们。 因此,我发现此http://msdn.microsoft.com/zh-cn/library/microsoft.visualstudio.testtools.unittesting.priorityattribute.aspx在“备注”部分中说:“测试系统未使用此属性。它是为自定义目的提供给用户的。” ??那有什么好处呢?他们是否希望我编写自己的测试包装程序以利用这个出色的属性(如果我想付出那么多的努力,就可以轻松编写自己的内容……) 因此,足够的咆哮;最重要的是,有没有办法控制单元测试的运行顺序? [TestMethod] [Priority(0)] 等等似乎不起作用,这是有道理的,因为Microsoft表示不会。 另外,请不要评论“违反隔离”。TestClass隔离了我正在测试的内容,而不是单独的TestMethods。无论如何,每个测试都可以独立运行就可以了,因为无法拆除静态类,所以它们不能以随机顺序一起运行。 哦,我也知道“订购测试”。

6
在测试过程中注入@Autowired私有字段
我有一个组件安装程序,它实际上是一个应用程序的启动器。它的配置如下: @Component public class MyLauncher { @Autowired MyService myService; //other methods } MyService带有@ServiceSpring注释,并自动连接到我的启动器类中,没有任何问题。 我想为MyLauncher编写一些jUnit测试用例,为此,我启动了一个这样的类: public class MyLauncherTest private MyLauncher myLauncher = new MyLauncher(); @Test public void someTest() { } } 我可以为MyService创建一个Mock对象,然后将其注入测试类中的myLauncher吗?由于Spring正在处理自动装配,因此我目前在myLauncher中没有吸气剂或吸气剂。如果可能的话,我不想添加getter和setter。我可以告诉测试用例使用@Beforeinit方法将模拟对象注入自动装配的变量中吗? 如果我要彻底解决这个问题,请随意说。我还是这个新手。我的主要目标是只具有一些Java代码或注释,即可将模拟对象放入该@Autowired变量中,而无需编写setter方法或使用applicationContext-test.xml文件。我宁愿在.java文件中维护测试用例的所有内容,而不必只为测试维护单独的应用程序内容。 我希望将Mockito用于模拟对象。过去,我是通过使用org.mockito.Mockito和创建对象来完成此操作的Mockito.mock(MyClass.class)。

5
如何使用Entity Framework Core模拟异步存储库
我正在尝试为调用异步存储库的类创建一个单元测试。我正在使用ASP.NET Core和Entity Framework Core。我的通用存储库如下所示。 public class EntityRepository<TEntity> : IEntityRepository<TEntity> where TEntity : class { private readonly SaasDispatcherDbContext _dbContext; private readonly DbSet<TEntity> _dbSet; public EntityRepository(SaasDispatcherDbContext dbContext) { _dbContext = dbContext; _dbSet = dbContext.Set<TEntity>(); } public virtual IQueryable<TEntity> GetAll() { return _dbSet; } public virtual async Task<TEntity> FindByIdAsync(int id) { return await …

6
Shell脚本的单元测试
多年来,我从事的几乎所有产品都涉及一定程度的Shell脚本(或Windows上的批处理文件,PowerShell等)。即使我们用Java或C ++编写了大量代码,但似乎总是存在一些集成或安装任务,而这些任务最好使用Shell脚本来完成。 这样,shell脚本便成为随附代码的一部分,因此需要像已编译的代码一样进行测试。有没有人对其中的一些shell脚本单元测试框架有经验,例如shunit2?目前,我主要对Linux shell脚本感兴趣。我想知道测试工具能够很好地复制其他xUnit框架的功能和易用性,以及与持续构建系统(如CruiseControl或Hudson)集成的难易程度。

3
Haskell单元测试
我是Haskell的新手,正在从事单元测试,但是我发现生态系统非常混乱。我对HTF和HUnit之间的关系感到困惑。 在某些示例中,我看到您设置了测试用例,将其导出到测试列表中,然后在ghci中运行runTestsTT(如此HUnit示例)。 在其他示例中,您将创建一个绑定到cabal文件的测试运行器,该运行器使用一些预处理器魔术来查找您的测试,如git示例所示。同样,似乎需要在HTF测试前面加上前缀,test_否则它们将无法运行?我很难找到关于它的任何文档,我只是注意到每个人都有的模式。 无论如何,有人可以帮我解决这个问题吗?在Haskell中,什么是标准的做事方式?最佳做法是什么?什么是最容易设置和维护的?

5
如何测试JSON路径是否不包含特定元素,或者是否存在该元素为null?
我一直在为简单的Spring Web应用程序编写一些简单的单元测试例程。当我在资源的getter方法上添加@JsonIgnore批注时,所得的json对象不包含相应的json元素。因此,当我的单元测试例程尝试测试它是否为空(这是我的情况的预期行为,我不希望密码在json对象中可用)时,测试例程会遇到异常: java.lang.AssertionError:JSON路径:$ .password没有值,异常:路径:$ ['password']没有结果 这是我编写的单元测试方法,使用is(nullValue())方法测试“密码”字段: @Test public void getUserThatExists() throws Exception { User user = new User(); user.setId(1L); user.setUsername("zobayer"); user.setPassword("123456"); when(userService.getUserById(1L)).thenReturn(user); mockMvc.perform(get("/users/1")) .andExpect(jsonPath("$.username", is(user.getUsername()))) .andExpect(jsonPath("$.password", is(nullValue()))) .andExpect(jsonPath("$.links[*].href", hasItem(endsWith("/users/1")))) .andExpect(status().isOk()) .andDo(print()); } 我还尝试了jsonPath()。exists(),它得到了类似的异常,指出该路径不存在。我将分享更多的代码片段,以便使整个情况更具可读性。 我正在测试的控制器方法看起来像这样: @RequestMapping(value="/users/{userId}", method= RequestMethod.GET) public ResponseEntity<UserResource> getUser(@PathVariable Long userId) { logger.info("Request arrived for getUser() with params {}", …

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.