RedundantArgumentMatcherException в конвейере Azure, когда используется поле, а не при использовании локальной переменноC#

Место общения программистов C#
Anonymous
RedundantArgumentMatcherException в конвейере Azure, когда используется поле, а не при использовании локальной переменно

Сообщение Anonymous »


У меня возникла проблема, которая возникает в моем конвейере 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'
enter code here


Источник: https://stackoverflow.com/questions/781 ... -and-not-w

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