Измешивание DBConnection с NUNIT/NSUBSTITUTE/AutoFixture и InsightDatabaseC#

Место общения программистов C#
Anonymous
 Измешивание DBConnection с NUNIT/NSUBSTITUTE/AutoFixture и InsightDatabase

Сообщение Anonymous »

Мы используем NUNIT, NSUBSTITUTE и AUTOFIXTURE, чтобы проверить класс репозитория, который построен в верхней части базы данных Insight ... < /p>

[TestFixture]
public class CalculationResultsRepositoryTests
{
private IFixture _fixture;

private IDbConnection _connection;
private CalculationResultsRepository _calculationResultsRepository;

[SetUp]
public void Setup()
{
_fixture = new Fixture().Customize(new AutoConfiguredNSubstituteCustomization());
_connection = _fixture.Freeze();
_calculationResultsRepository = _fixture.Create();
}

[Test]
public void TestReturnsPagedCalculationResults()
{
//Arrange
var financialYear = _fixture.Create();
var pagedResults = _fixture.Create();
_connection.QueryAsync(Arg.Any(), Arg.Any(), Arg.Any()).Returns(pagedResults);

//Act
var result = _calculationResultsRepository.PagedListAsync(financialYear);

//Assert
Assert.IsInstanceOf(result);
}
}
< /code>

Однако при запуске теста мы видим следующее исключение: < /p>


System.Reflection.TargetInvocationException: Исключение было выбрано целью вызова.
----> nsubstitute.exceptions.ulexpectedargumentmatcherexception: совместные аргументы (arg.is, Arg. any) следует использовать только вместо аргументов членов. Не используйте в операторе return () или где -либо еще за пределами вызова участника.
Правильное использование:
sub.mymethod (arg.any ()). Return ("hi")
Неправильное использование:
sub.mymethod ("hi"). Return (arg.any ()) < /p>
< /blockquote>

Мы в некотором потере с Как решить это, однако при предположении, кажется, что -то связано с тем, что тип возврата определяется как общий в пределах параметра на этой конкретной перегрузке метода расширения QueryAsync () в InsightDatabase: < /p>

public static Task QueryAsync(this IDbConnection connection, string sql, object parameters, IQueryReader returns, CommandType commandType = CommandType.StoredProcedure, CommandBehavior commandBehavior = CommandBehavior.Default, int? commandTimeout = default(int?), IDbTransaction transaction = null, CancellationToken? cancellationToken = default(CancellationToken?), object outputParameters = null);
< /code>

Кто -нибудь знает, как успешно издеваться над этим? это: < /p>

var results = await _connection.QueryAsync("GetCalculationResults", new { FinancialYearId = financialYearId, PageNumber = pageNumber, PageSize = pageSize },
Query.ReturnsSingle()
.ThenChildren(Some.Records));


Подробнее здесь: https://stackoverflow.com/questions/389 ... htdatabase

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