Тестовые случаи, показанные некорректно в основном проекте dotnet - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь создать тестовые сценарии для моих тестов в моем проекте ядра dotnet.Но Resharper показывает, что они не сгруппированы в окне «сессий модульного тестирования» Resharper

Мой код:

public class Calculator
{
    public static int Multiply(int x, int y)
    {
        return x * y;
    }
}

[TestFixture]
public class CalculatorTests
{
    private static IEnumerable<TestCaseData> CalculatorTestCaseData
    {
        get
        {
            yield return new TestCaseData(3, 4, 12).SetName("Multiply 3 and 4 should be 12");
            yield return new TestCaseData(4, 5, 20).SetName("Multiply 4 and 5 should be 20");
        }
    }

    private static IEnumerable<TestCaseData> CalculatorTestCaseDataWithZero
    {
        get
        {
            yield return new TestCaseData(0, 4, 12).SetName("Multiply 0 and 4 should be 0");
            yield return new TestCaseData(5, 0, 20).SetName("Multiply 5 and 0 should be 0");
        }
    }

    [Test]
    [TestCaseSource(typeof(CalculatorTests), nameof(CalculatorTestCaseData))]
    [TestCaseSource(typeof(CalculatorTests), nameof(CalculatorTestCaseDataWithZero))]
    public void Calculate_Success(int x, int y, int expected)
    {
        Calculator.Multiply(x, y).Should().Be(expected);
    }
}

в основном проекте DotNet Resharper показывает

enter image description here

в каркасе dotnet показывает

enter image description here

в каркасных тестах сгруппированных.Мне нужно это в моем приложении с ядром dotnet.

Кто-нибудь может мне помочь?

Я использую:

  • Ядро dotnet - 2.1
  • Nunit - 3.10.1
  • NUnitTestAdapter - 3.10.0
  • Microsoft.NET.Test.Sdk - 15,8.0
  • Resharper - 2018.2.3
  • VS community 2017 - 15.8.2
  • FluentAssertions - 5.4.2

Обновление

Случай, когда resharper не распознает мои тесты

public class Calculator
{
    public static int Multiply(MyInt x, MyInt y)
    {
        return x.Value * y.Value;
    }
}

[TestFixture]
public class CalculatorTests
{
    private static IEnumerable<TestCaseData> CalculatorTestCaseData
    {
        get
        {
            yield return new TestCaseData(new MyInt(3), new MyInt(4), new MyInt(12)).SetName("2132");
            yield return new TestCaseData(new MyInt(4), new MyInt(5), new MyInt(20)).SetName("123123asdas");
        }
    }

    [Test]
    [TestCaseSource(typeof(CalculatorTests), nameof(CalculatorTestCaseData))]
    public void Calculate_Success(MyInt x, MyInt y, MyInt expected)
    {
        Calculator.Multiply(x, y).Should().Be(expected.Value);
    }
}

public class MyInt
{
    public int Value;

    public MyInt(int value)
    {
        Value = value;
    }
}

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Есть ли у вас предложения о разнице между отображением в dotnet Core и dotnet framework?И мне нужно назвать мои тесты.Именование по умолчанию основано на ToString, я должен переопределить его для всех используемых в тестовых случаях классов

Вместо использования метода .SetName() из TestCaseData вы можете создать объект тестового случая и перезаписать .ToString() метод следующим образом:

public class CalculatorTestData
{
    public CalculatorTestData(int x, int y, int expected)
    {
        X = x;
        Y = y;
        Expected = expected;
    }

    public int X { get; }
    public int Y { get; }
    public int Expected { get; }

    /// <inheritdoc />
    public override string ToString()
    {
        return $"Multiply {X} and {Y} should be {Expected}";
    }
}

Использование объекта CalculatorTestData:

public static IEnumerable<TestCaseData> CalculatorTestCaseData
{
    get
    {
        yield return new TestCaseData(new CalculatorTestData(3, 4, 12));
        yield return new TestCaseData(new CalculatorTestData(4, 5, 20));
    }
}

public static IEnumerable<TestCaseData> CalculatorTestCaseDataWithZero
{
    get
    {
        yield return new TestCaseData(new CalculatorTestData(0, 4, 12));
        yield return new TestCaseData(new CalculatorTestData(5, 0, 20));
    }
}

И, наконец, рефакторинг метода тестирования для использования объекта CalculatorTestData:

[Test]
[TestCaseSource(typeof(CalculatorTests), nameof(CalculatorTestCaseData))]
[TestCaseSource(typeof(CalculatorTests), nameof(CalculatorTestCaseDataWithZero))]
public void Calculate_Success(CalculatorTestData data)
{
    // arrange/act 
    int result = Calculator.Multiply(data.X, data.Y);

    // assert
    result.Should().Be(data.Expected, because: $"{data.X} * {data.Y} should be {data.Expected}");
}

Test Explorer - результаты юнит-тестов:

Test Explorer - unit tests results

Resharper - результаты юнит-тестов:

Resharper - Unit Test Sessions

0 голосов
/ 22 сентября 2018

Не знаю почему, но использование метода .SetName() из TestCaseData, похоже, немного портит тесты при использовании Resharper.Иногда тесты отображались как Inconclusive .

. Чтобы правильно сгруппировать модульные тесты (т.е. показывать не только класс теста, но и метод теста), я решил провести некоторый рефакторинг следующим образом:

1) Удалите метод .SetName()

public static IEnumerable<TestCaseData> CalculatorTestCaseData
{
    get
    {
        yield return new TestCaseData(3, 4, 12);
        yield return new TestCaseData(4, 5, 20);
    }
}

public static IEnumerable<TestCaseData> CalculatorTestCaseDataWithZero
{
    get
    {
        yield return new TestCaseData(0, 4, 12);
        yield return new TestCaseData(5, 0, 20);
    }
}

2) Измените метод тестирования

Я произвел рефакторинг метода тестирования, используя Arrange-Act-Утвердите образец.Теперь тестовое сообщение задается с помощью Fluent Astionstions:

[Test]
[TestCaseSource(typeof(CalculatorTests), nameof(CalculatorTestCaseData))]
[TestCaseSource(typeof(CalculatorTests), nameof(CalculatorTestCaseDataWithZero))]
public void Calculate_Success(int x, int y, int expected)
{
    // arrange/act 
    int result = Calculator.Multiply(x, y);

    // assert
    result.Should().Be(expected, because: $"Multiply {x} and {y} should be {expected}");
}

Test Explorer - результаты модульных тестов:

Test Explorer unit tests results

Resharper - UnitТестовые сессии:

Resharper - Unit Test Sessions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...