单元测试是一种方法,通过该方法测试各个源代码单元以确定它们是否适合使用。
. 我正确理解的是,如果我要在开玩笑的环境环境下进行测试,那我将无法导入不导出ESM模块的库?这似乎是我观察到的行为,但想巩固我的理解。
有一种方法来创建单元测试,以在部署之前测试AWS Appsync的查询和突变(使用无服务器框架)。 我创建了Appsync API,数据源是关系da ...
#[test] fn test_tokenize() { let actual_token_json = /* string */; let expected_token_json = /* string */; assert_eq!(actual_token_json, expected_token_json); }
client.conversations.configuration.update(sid: user.sid)
如何使用moq.dapper<dynamic>模拟QueryAsync
我们有一个下面的类,可以在参数中提供的表中找到记录,然后在事务中删除它们。 公共异步任务 我们有一个下面的类,可以在参数中提供的表中找到记录,然后在事务中删除它们。 public async Task<IEnumerable<DataTableRecordsResponse>> DeleteDataAsync(string tenantId) { if (string.IsNullOrEmpty(tenantId)) { throw new ArgumentNullException(nameof(tenantId)); } var deletedRecords = new List<DataTableRecordsResponse>(); try { using (IDbConnection conn = _sqlDbConnection.CreateConnection()) { conn.Open(); using (IDbTransaction transaction = conn.BeginTransaction()) { try { foreach (string table in s_allowedTableName) { string selectQuery = $"SELECT * FROM {table} WHERE TenantId = @tenantId;"; IEnumerable<dynamic> records = await _dapperWrapper.QueryAsync<dynamic>(conn, selectQuery, new { tenantId }, transaction); deletedRecords.Add(new DataTableRecordsResponse(table, records)); if (records.Any()) { string deleteCommand = $"DELETE FROM {table} WHERE TenantId = @tenantId; "; await _dapperWrapper.ExecuteAsync(conn, deleteCommand, new { tenantId }, transaction); } } transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); _logger.LogException(ex); throw; } finally { _logger.LogEvent("Tenant data purge operation completed"); } } } } catch (Exception ex) { _logger.LogException(ex); throw; } return deletedRecords; } } 我正在尝试使用以下代码模拟QueryAsync,但是,它返回null: [TestMethod] public async Task Successful_Transaction_Should_Complete_Transaction_And_Return_Deleted_Records() { //Arrange _sqlDbConnection.Setup(c => c.CreateConnection()).Returns(_dbMock.Object); _bulkOperationHelper = new BulkOperationHelper(_sqlDbConnection.Object, _loggerMock.Object); _dbMock.SetupDapperAsync(c => c.QueryAsync<dynamic>(It.IsAny<string>(), It.IsAny<object>(), null, null, null)) .ReturnsAsync(_results); _dbMock.SetupDapper(c => c.ExecuteScalar(It.IsAny<string>(), It.IsAny<object>(), null, null, null)) .Returns(0); //Act List<DataTableRecordsResponse> deletedRecords = await _bulkOperationHelper.TenantDecommissioningBatchDelete(_tenantId, _tables); //Assert Assert.IsNotNull(deletedRecords); Assert.IsTrue(deletedRecords.Count > 0); Assert.IsTrue(deletedRecords.Count == 0); } thiseythe thiseytory似乎有一个关于此事的dapper存储库中的开放式。 由于不可能嘲笑QueryAsync,可以在以下添加到涂层库的包装类别。 public class DapperWrapper : IDapperWrapper { public async Task<IEnumerable<T>> QueryAsync<T>(IDbConnection connection, string sql, object param = null, IDbTransaction transaction = null) { return await connection.QueryAsync<T>(sql, param, transaction); } public async Task<int> ExecuteAsync(IDbConnection connection, string sql, object param = null, IDbTransaction transaction = null) { return await connection.ExecuteAsync(sql, param, transaction); } } 在单元测试中,类和IT方法可以被模拟如下: [TestMethod] public async Task DeleteDataAsync_ShouldCommitTransaction_WhenAllTablesProcessed() { foreach (string table in AllowedTables) { SetupMockForTableWithRecords(_mockConnection, _mockTransaction, _tenantId, table); } IEnumerable<DataTableRecordsResponse> result = await _tenantDataPurgeHelper.DeleteDataAsync(_tenantId); AssertResultsAndCommit(result); _mockTransaction.Verify(x => x.Commit(), Times.Once); } private void SetupMockForTableWithRecords(Mock<IDbConnection> mockConnection, Mock<IDbTransaction> mockTransaction, string tenantId, string table) { _mockDapperWrapper .Setup(x => x.QueryAsync<dynamic>(mockConnection.Object, $"SELECT * FROM {table} WHERE TenantId = @tenantId;", It.Is<object>(p => p.Equals(new { tenantId })), mockTransaction.Object)) .ReturnsAsync(new List<dynamic> { new { Id = 1, TenantId = tenantId } }); _mockDapperWrapper .Setup(x => x.ExecuteAsync(mockConnection.Object, $"DELETE FROM {table} WHERE TenantId = @tenantId;", It.Is<object>(p => p.Equals(new { tenantId })), mockTransaction.Object)) .ReturnsAsync(1); }
JS非常陌生,但我正在尽力学习。实际上,我试图嘲笑Express。这是我的基类(用于测试目的):
async getPreferences(eUserId: string): Promise<UserPreferences> { const userPreferences = await this.userPreferencesModel.findOne({ eUserId, }); if (!userPreferences) { throw new NotFoundException('no results'); } return userPreferences; } 这是我的测试: it('should throw an error if no userPreferences found', async () => { // Mock findOne result jest .spyOn(model, 'findOne') .mockResolvedValueOnce(throwError(new NotFoundException())); const result = service.getPreferences('123123'); // Assertion await expect(result).rejects.toThrow('no results'); }); 这是我在控制台中遇到的故障错误: Received promise resolved instead of rejected Resolved to value: {"_subscribe": [Function init]} 94 | 95 | // Assertion > 96 | await expect(result).rejects.toThrow('no results'); | ^ 97 | }); 98 | }); 99 | at expect (../node_modules/expect/build/index.js:128:15) at Object.<anonymous> (user-preferences/user-preferences.service.spec.ts:96:13) 这是最终所做的: mockResolvedValue通过null,在我知道不存在的值中 service.getPreferences 您遇到的问题是由于使用ThrowerRor对无染色值的使用不正确。取而代之的是,您应该使用MockejectedValueonce模拟拒绝的承诺。此外,您可以使用try-catch块来处理承诺拒绝并验证错误消息。 我做的对我有用的事情类似: it('should throw an error if no userPreferences found', async () => { // Mock findOne result jest .spyOn(model, 'findOne') .mockResolvedValue( null ); // Assertion expect(service.getPreferences('-1')).rejects.toThrow('no results'); }); 解释: MockRejectedValueonce:嘲笑使用NotFoundException拒绝的FindOne方法。 try-catch块:尝试执行 getPreathences方法并捕获了被扔的任何错误。 expect(e.message)。 错误的消息等于“无结果”。 这种方法可确保如果承诺未按预期拒绝并正确检查错误消息,则测试将失败。
如何在 Spring Boot 中为 PostgreSQL JPA 存储库编写单元测试?
我有 docker compose 文件,其中有这样的 postgres 容器配置 cmj-postgres: image: postgres:15 # 使用最新稳定版本的 PostgreSQL 容器名称:cmj-postgres
这是一个示例代码:
我在这两种用法之间找不到任何实际区别。只是为了避免将来的并发症,是否可能导致一个问题随机选择其中任何一个? 验证(MockObj).foo(); V ...
Llets说我有一个具有i Equabal的ComponentDefinitionRoot: componentDefinitionRoot类:iquabable
Llets说我有一个componentDefinitionRoot具有i Equapable:
如何使用异步上下文管理器为函数编写单元测试 异步 def post_message(url, data, msg_id): 与 aiohttp.ClientSession() 异步作为会话: 尝试: 与 session.p 异步...