Вопрос об основах юнит-тестирования о коллекциях и их методах Add, Remove, ... - PullRequest
0 голосов
/ 27 февраля 2020

Я прочитал эту статью о лучших практиках модульных тестов, но я до сих пор ничего не понимаю. Если у меня есть List<T> или другая коллекция, а затем для добавления / удаления элементов используется метод .Add или .Remove, считается ли он аранжировкой или актом ?

Например, это определенно считается упорядочить :

List<decimal> values = new List<decimal>
{
    0.01668m,
    0.01666m
};

Рассмотрим следующие примеры:

public class IndicatorTests
{
    [Fact]
    public void SimpleMovingAverage_MultipleCloseValues_ReturnsSMA()
    {
        // Arrange
        SimpleMovingAverage sma = new SimpleMovingAverage(5);

        // Act
        sma.Add(0.01692m);
        sma.Add(0.01685m);
        sma.Add(0.01686m);
        sma.AddRange(new List<decimal>
        {
            0.01668m,
            0.01666m
        });
        decimal actual = sma.GetResult();

        // Assert
        Assert.Equal(0.016794m, actual);
    }

    [Fact]
    public void SimpleMovingAverageBuilder_MultipleCloseValues_ReturnsSMA()
    {
        // Arrange
        SimpleMovingAverage sma = new SimpleMovingAverageBuilder(5)
            .Add(0.01692m)
            .Add(0.01685m)
            .Add(0.01686m)
            .Add(0.01668m)
            .Add(0.01666m)
            .Build();

        // Act
        decimal actual = sma.GetResult();

        // Assert
        Assert.Equal(0.016794m, actual);
    }
}

Я считаю, что второй тест в порядке условность-накрест. А как насчет первого?

Должен ли я сделать это так:

[Fact]
public void SimpleMovingAverage_MultipleCloseValues_ReturnsSMA()
{
    // Arrange
    SimpleMovingAverage sma = new SimpleMovingAverage(5);
    List<decimal> values = new List<decimal>
    {
        0.01668m,
        0.01666m
    };

    // Act
    sma.Add(0.01692m);
    sma.Add(0.01685m);
    sma.Add(0.01686m);
    sma.AddRange(values);
    decimal actual = sma.GetResult();

    // Assert
    Assert.Equal(0.016794m, actual);
}

Или так:

[Fact]
public void SimpleMovingAverage_MultipleCloseValues_ReturnsSMA()
{
    // Arrange
    SimpleMovingAverage sma = new SimpleMovingAverage(5);
    List<decimal> values = new List<decimal>
    {
        0.01668m,
        0.01666m
    };

    sma.Add(0.01692m);
    sma.Add(0.01685m);
    sma.Add(0.01686m);
    sma.AddRange(values);

    // Act
    decimal actual = sma.GetResult();

    // Assert
    Assert.Equal(0.016794m, actual);
}

Какой из них лучше? Пожалуйста, опишите ваш ответ.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Раздел act должен содержать действие, на которое нацелен ваш тест. В вашем случае это вызов GetResult().

Поэтому в разделе arrange содержится все, что приводит к действию, которое вы собираетесь протестировать. В вашем случае это настройка вашего SimpleMovingAverage экземпляра.

Я бы предложил go с вашей последней версией:

[Fact]
public void SimpleMovingAverage_MultipleCloseValues_ReturnsSMA()
{
    // Arrange
    SimpleMovingAverage sma = new SimpleMovingAverage(5);
    List<decimal> values = new List<decimal>
    {
        0.01668m,
        0.01666m
    };

    sma.Add(0.01692m);
    sma.Add(0.01685m);
    sma.Add(0.01686m);
    sma.AddRange(values);

    // Act
    decimal actual = sma.GetResult();

    // Assert
    Assert.Equal(0.016794m, actual);
}
1 голос
/ 27 февраля 2020

Оба последних 2 факта одинаковы, и я думаю, что вы тоже знаете ответ на этот вопрос. Верьте в себя.

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