模拟和伪造是隔离代码或组件的方法,以确保单元测试仅针对可测试的代码单元运行,而不实际使用应用程序的其他组件或依赖项。 Mocking与伪造的不同之处在于可以检查模拟以断言测试结果。
我有以下代码在测试期间设置假时间。 我想在测试期间更改时间。 也就是说,测试应该从 9:00 开始,然后像 10:00 一样继续。 来自
我有一个使用 django ninja 编写的单一端点。该端点执行一个执行多个请求的爬网程序。请求序列有 3 种不同的例程,具体取决于
C# XUnit (.Net 8):要测试的端点中的 IFormFile 参数始终接收为 null
我需要 XUnit 测试下一个端点: /// /// 停止csv文件中的所有账户 /// /// /// 我需要 XUnit 测试下一个端点: /// <summary> /// Cease all account in csv file /// </summary> /// <param name="dispatcher"></param> /// <param name="csvFile">CSV file with format (Id,Name,SID,CeaseDate,Note)</param> /// <param name="ct"></param> /// <returns></returns> [HttpPost("cease/bulk")] [Authorize(Roles = VdcSecurity.Role.ManagementAdmin)] [AllowAnonymous] public async Task<ActionResult<bool>> CeaseBulkAccountAsync( [FromServices][IsSensitive] ICommandDispatcher dispatcher, [FromForm] IFormFile csvFile, [IsSensitive] CancellationToken ct = default ) { var identity = Vdc.Libs.AspNet.Controller.HttpContextExtensions.GetIdentity(HttpContext); var ipAddress = HttpContext.GetIpAddress(); var command = new CeaseBulkCommand(identity, HttpContext.TraceIdentifier) { Stream = csvFile.OpenReadStream(), IpAddress = ipAddress }; var result = await dispatcher.DispatchAsync(_provider, command, ct); return result.ToActionResult(this); } 我的问题是无论我如何创建 IFormFile 对象,它总是被接收为 null。 这是我的尝试之一: const string filePath = "CeaseBulkAccount.csv"; using (var httpClient = ApiClient.HttpClient) { var form = new MultipartFormDataContent(); byte[] fileData = File.ReadAllBytes(filePath); ByteArrayContent byteContent = new ByteArrayContent(fileData); byteContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); form.Add(byteContent, "file", Path.GetFileName(filePath)); var result = await httpClient.PostAsync("/api/accounts/cease/bulk", form); } 我到达控制器,但收到的 csvFile 为空。 ApiClient.HttpClient 是我们自己的客户端,但我不介意使用通用客户端。 我不得不说我们的 httpClient“PostAsync”收到了 HttpContent。 第二次尝试: var httpClient = ApiClient.HttpClient; var fileContent = new ByteArrayContent(ReadFully(file)); fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "CeaseBulkAccount.csv" }; var response = await httpClient.PostAsync("/api/accounts/cease/bulk", fileContent, ct); public static byte[] ReadFully(Stream input) { byte[] buffer = new byte[16 * 1024]; using (MemoryStream ms = new MemoryStream()) { int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } return ms.ToArray(); } } 再次,csvFile 为空。 我们的 PostAsync: // // Summary: // Send a POST request with a cancellation token as an asynchronous operation. // // Parameters: // requestUri: // The Uri the request is sent to. // // content: // The HTTP request content sent to the server. // // cancellationToken: // A cancellation token that can be used by other objects or threads to receive // notice of cancellation. // // Returns: // The task object representing the asynchronous operation. // // Exceptions: // T:System.InvalidOperationException: // The requestUri must be an absolute URI or System.Net.Http.HttpClient.BaseAddress // must be set. // // T:System.Net.Http.HttpRequestException: // The request failed due to an underlying issue such as network connectivity, DNS // failure, server certificate validation or timeout. // // T:System.Threading.Tasks.TaskCanceledException: // .NET Core and .NET 5 and later only: The request failed due to timeout. // // T:System.UriFormatException: // The provided request URI is not valid relative or absolute URI. public Task<HttpResponseMessage> PostAsync([StringSyntax("Uri")] string? requestUri, HttpContent? content, CancellationToken cancellationToken); 传递给form.Add的名称必须与控制器的action方法中的名称匹配; [FromForm] IFormFile csvFile。 因为那个是csvFile,所以你必须添加如下文件。 form.Add(byteContent, "csvFile", Path.GetFileName(filePath)); 通过上述更改,您的第一次尝试效果很好。
使用 pytest 和 Monkeypatching 进行 Celery 集成测试
我正在尝试在 docker 上使用 Python 3.9.5、Celery 5.2.6、pytest 7.1.0 和 FastAPI 运行一些简单的集成测试。 项目结构: 📦 ┣ 📂应用程序 ┣ ┣ 📂API ┣ ┣ ┣ 📂路线 ┣ ┣ ┣ ┗ 📜芹菜...
我看过这个问题的评论,但他们似乎没有具体告诉我我需要什么。 我正在修改此测试,以前只需处理单个标头: 间谍ApiResol...
Spring 6.1 RestClient JUnit 模拟测试
我有一个 Spring 6.1 RestClient: @服务 @RequiredArgsConstructor 公共类 ProductServiceClient { @Value("${spring.client.product.url}") 私有最终字符串baseUrl; 私人...
如何使用 Assertj 的 usingRecursiveComparison 的等效项来验证方法调用
在测试中,为了验证没有 hashcode/equals 方法的数据对象,Assertj 有一个非常好的 API: 断言.assertThat(结果) .usingRecursiveComparison() .ignoringFields("id&qu...
我正在尝试模拟 PHPUnit 中的更新方法,但到目前为止,shouldReceive('update') 尚未被调用。 PostServiceTest.php 公共函数 test_can_update_a_post(): void { $mockedPostMod...
情况 我在这里尝试使用 MOQ 为我的 GroupService 编写一些单元测试。 为了创建 GroupService 的实例,我模拟了 4 个需要通过
test_client/wclient.py 导入 json 导入请求 客户端 = requests.session() def 设置(): 响应 = REST_CLIENT.post( “https://placeholder.com”, auth=(占位符、占位符...
如何使用unitOfWork和存储库模拟数据库访问(.NET Core 6)
在 PUT 路由中,我有一个实用方法,我们可以在其中放置业务逻辑(因此,当我们需要完成路由所做的工作时,我们可以调用该方法而不是路由)。 我不明白我怎么能假...
我正在尝试模拟以下方法的返回值 导入gitlab 从unittest.mock导入补丁 def get_all_iters(): gl = gitlab.Gitlab(url='test_url', private_token) 结果 = gl....
如何模拟文件服务器中的文件存在来测试 FastAPI 静态文件?
我正在使用 FastAPI 静态文件类从服务器下载文件。一切正常,我可以使用 URL 轻松下载文件。 现在,我需要编写一个用于文件下载的测试用例,我......
我是Sinon模拟新手并试图测试一个函数 所以我的功能是这样的,保存: 函数(数据){ var x = 10; var y = []; 延迟.when( 应用程序.ajax({ ...
我正在寻找一种方法来测试名为 fetch_options 的函数,该函数基本上呈现从内部 API 返回的 JSONResponse。我进行此测试的方法是模拟请求,因为内部...
假设有一个带有回调的接口: 接口 SomeInterface { fun doSomething(arg: String, 回调: (Exception?, Long) -> Unit) } 我将其扩展为一个挂起函数,例如 t...
使用 AWS lambda,模拟/忽略 lambda。开始覆盖
我正在使用以下设置进行测试 func HandleRequest(ctx context.Context, 请求 LambdaRequest) (LambdaResponse, 错误) { 返回 LambdaResponse{ 状态代码:200, 标题:...
我正在开发一个 dotnet 核心项目,试图在我的 Xunit.net 测试中模拟一些第三方类。我试图伪造的类不能通过 Moq 或 NSubstit 等受限框架来模拟......
如何编写模拟单元测试代码来测试将输入参数接口向下转换为具体类的类方法?
我正在编写模拟单元测试代码,该代码将测试将输入参数接口向下转换为具体类的类方法。 这是名为 CarWrapperFactory 的“被测系统(SUT)”类: p...
我想完成以下工作,但我不知道如何正确模拟 forEach 行为。 (该代码取自相关问题Testing Java Improvement for Behaviour with Mockito) @测试 公共...