Мы используем 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