SonarQube предоставляет экземпляры ValueTask, возвращаемые из вызовов методов, которые должны быть непосредственно ожидаC#

Место общения программистов C#
Ответить
Anonymous
 SonarQube предоставляет экземпляры ValueTask, возвращаемые из вызовов методов, которые должны быть непосредственно ожида

Сообщение Anonymous »


В моем тестовом проекте .NET у меня есть такой метод:

[Факт] публичная асинхронная задача SampleMethod() { // данный Guid someRoleId = Guid.NewGuid(); NpgsqlException npgsqlException = GetNpsqlException(); вар не удалосьRoleStorageException = новый FailedRoleStorageException (npgsqlException); вар ожидаемоеRoleDependencyException = новое RoleDependencyException (failedRoleStorageException); this.dataBrokerMock.SelectRoleByIdAsync(Arg.Any()).Throws(npgsqlException); // когда ValueTask returnTenantByIdTask = this.roleService.RoleByIdAsync(someRoleId); // затем RoleDependencyException factServiceException = await Assert.ThrowsAsync < RoleDependencyException > (() => getTenantByIdTask.AsTask()); фактическоеServiceException.Should().BeEquiваленто( ожидаемоеRoleDependencyException); await this.dataBrokerMock.Received(1).SelectRoleByIdAsync(Arg.Any()); this.dataBrokerMock.ClearReceivedCalls(); } В приведенном выше коде эта строка дает мне следующий запах кода SonarQube.
Экземпляры
ValueTask, возвращаемые в результате вызовов методов, должны быть непосредственно ожидаемы, возвращены или переданы в качестве аргумента для другого вызова метода. Другое использование, например сохранение экземпляра в локальном файле или поле, скорее всего, указывает на ошибку, поскольку экземпляры ValueTask должны использоваться только один раз.

Поэтому я пытаюсь решить эту проблему следующим образом:

[Факт] публичная асинхронная задача SampleMethod() { // данный Guid someRoleId = Guid.NewGuid(); NpgsqlException npgsqlException = GetNpsqlException(); вар не удалосьRoleStorageException = новый FailedRoleStorageException (npgsqlException); вар ожидаемоеRoleDependencyException = новое RoleDependencyException (failedRoleStorageException); this.dataBrokerMock.SelectRoleByIdAsync(Arg.Any()).Throws(npgsqlException); // когда и потом RoleDependencyException factServiceException = await Assert.ThrowsAsync( () => this.roleService.RoleByIdAsync(someRoleId).AsTask()); фактическоеServiceException.Should().BeEquiвалентно(expectedRoleDependencyException); await this.dataBrokerMock.Received(1).SelectRoleByIdAsync(Arg.Any()); this.dataBrokerMock.ClearReceivedCalls(); } Там я непосредственно ожидаю ValueTask, не сохраняя его в переменной. Но это также не решение для меня. Как я могу решить эту проблему?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»