Хороший способ начать проект Visual Studio MSTest? - PullRequest
0 голосов
/ 02 октября 2018

Я запускаю тестовый проект на VS 2017 для нового модуля старого программного обеспечения.Я новичок в TDD и модульном тестировании, поэтому мне интересно, если это правильный способ сделать это ...

Я начал с тестирования, как объекты добавляются в списки класса viewmodel:

[TestClass]
public class RTCM_Config_Test
{
    static RTCM_Bouton input = new RTCM_Bouton();
    static RTCM_Sortie output = new RTCM_Sortie();

    [TestMethod]
    public void CreateConfig()
    {
        //Arrange
        //Act
        RTCM_Config conf = new RTCM_Config();
        //Assert
        Assert.IsNotNull(conf);
    }

    [TestMethod]
    public void AddNewInputInConfig()
    {
        //Arrange
        RTCM_Config conf = new RTCM_Config();
        //Act
        bool isOk = conf.CreateElements(input);
        //Assert
        Assert.IsTrue(isOk);
    }

    [TestMethod]
    public void AddNewOutputInConfig()
    {
        //Arrange
        RTCM_Config conf = new RTCM_Config();
        //Act
        bool isOk = conf.CreateElements(output);
        //Assert
        Assert.IsTrue(isOk);
    }

}

И функции CreateElements в модели представления:

    public bool CreateElements(RTCM_Bouton btn)
    {
        if (listButtonsInput == null) return false;

        if (btn == null) return false;

        if (listButtonsInput.Count >= 10) return false;

        return true;

    }

    public bool CreateElements(RTCM_Sortie sortie)
    {
        if (listButtonsOutput == null) return false;

        if (sortie == null) return false;

        if (listButtonsOutput.Count >= 10) return false;

        return true;
    }

Перед тестовыми методами я объявляю статические объекты ввода и вывода в качестве тестовых параметров, это хороший способ сделать?Или я должен объявлять тестовый объект в каждом методе тестирования?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Для вашего тестового объекта const RTCM_Config вы можете использовать переменную класса и инициализировать ее в методе инициализации теста:

private RTCM_Config _config;

[TestInitialize]
public void TestInitialize()
{
    _config = new RTCM_Config();
}

На мой взгляд, все, что сокращает код, приветствуется.Вы также можете ввести переменную класса для своей кнопки, но вы должны переставлять ее для каждого теста.

Два ваших вторых вопроса, вы можете использовать тесты на основе данных.

[DataTestMethod]        
[DataRow(60, 13d)]
[DataRow(1800, 44d)]
public void Testcase(int input, double expected)
{
   //Do your stuff
}

Happyкодирования!

0 голосов
/ 02 октября 2018

Я не уверен на 100%, что вы спрашиваете, но я думаю, что вы спрашиваете, как обращаться с параметрами вашего прохождения, RTCM_Bouton btn & RTCM_Sortie sortie.

public bool CreateElements(RTCM_Bouton btn)
{
    if (listButtonsInput == null) return false;

    if (btn == null) return false;

    if (listButtonsInput.Count >= 10) return false;

    return true;

}

Этот код имеет 4 возможных возвращаемых значенияили маршрутов, поэтому мне понадобится 4 теста, обычно я следую соглашению об именах MethodName_Scenario_ExpectedResult

CreateElements_ListButtonsIsNull_ReturnsFalse()
CreateElements_BtnIsNull_ReturnsFalse()
CreateElements_ListButtonsIsNull_ReturnsFalse()
CreateElements_ListInputButtonsIs10orMore_ReturnsTrue()

. Вы должны использовать раздел // размещения вашего теста, чтобы «настроить» тест, включая все, что необходимо для методазапустить.Создайте класс и любые объекты, которые вам нужно передать с минимальной реализацией (достаточно, чтобы пройти тест).

Так, например,

[TestMethod]
CreateElements_BtnIsNull_ReturnsFalse()
{
//arrange
RTCM_Config conf = new RTCM_Config();
var RTCM_Bouton btn = null;

//act
var result = conf.CreateElements(btn);

//assert
Assert.IsFalse(result);
}

Поскольку RTCM_Bouton должен быть нулевым для одних тестов и иметь значение для других, я бы объявил его внутри каждого метода упорядочения тестов, а не как у глобальногопеременная.

...