У меня возникла проблема, которая возникает в моем конвейере Azure только при выполнении модульных тестов. Модульные тесты завершаются неудачно, если методы в тесте используют поле RankGeneratorвместо локальной переменной того же поля. Примеры классов приведены ниже.
Этот первый блок кода имеет RankGenerator в качестве поля, и конвейер завершается сбоем с сообщением об ошибке: NSubstitute.Exceptions.RedundantArgumentMatcherException : Некоторые спецификации аргументов (например, Arg. Is, Arg.Any) остались после последнего вызова.
Однако, если RankGenerator сначала объявлен как локальная переменная, конвейер не Я не потерплю неудачу. Есть ли у кого-нибудь объяснение такого поведения?
Пример неудачного теста:
Код: Выделить всё
public class RiskTests
{
private readonly IRankGenerator rankGenerator = Substitute.For();
private const string OriginalRisk = "Danger danger";
private const string OriginalRank = "Rank 1";
private Risk sut;
public RiskTests()
{
sut = Risk.Create(CreateTestActivity(), OriginalRisk, OriginalRank);
rankGenerator(
Arg.Is(x => x == null || !string.IsNullOrEmpty(x)),
Arg.Is(x => x == null || !string.IsNullOrEmpty(x)))
.GenerateRank().ReturnsForAnyArgs(_ => "000001");
}
[Fact]
public void Should_Add_Mitigation()
{
sut.AddMitigation("Do this to be safe", rankGenerator);
sut.Mitigations.ShouldNotBeEmpty();
sut.Mitigations.Count.ShouldBe(1);
sut.AddMitigation("And this is important", rankGenerator);
sut.Mitigations.Count.ShouldBe(2);
}
}
Код: Выделить всё
public class RiskTests
{
private readonly IRankGenerator rankGenerator = Substitute.For();
private const string OriginalRisk = "Danger danger";
private const string OriginalRank = "Rank 1";
private Risk sut;
public RiskTests()
{
sut = Risk.Create(CreateTestActivity(), OriginalRisk, OriginalRank);
rankGenerator(
Arg.Is(x => x == null || !string.IsNullOrEmpty(x)),
Arg.Is(x => x == null || !string.IsNullOrEmpty(x)))
.GenerateRank().ReturnsForAnyArgs(_ => "000001");
}
[Fact]
public void Should_Add_Mitigation()
{
var localRankGenerator = rankGenerator;
sut.AddMitigation("Do this to be safe", localRankGenerator);
sut.Mitigations.ShouldNotBeEmpty();
sut.Mitigations.Count.ShouldBe(1);
sut.AddMitigation("And this is important", localRankGenerator);
sut.Mitigations.Count.ShouldBe(2);
}
}
Код: Выделить всё
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/RigPlan.sln'
arguments: '--filter CI!=false'
testRunTitle: 'Run .Net Tests'
Источник: https://stackoverflow.com/questions/781 ... -and-not-w