Как выполнить несколько тестов в одном методе? - PullRequest
1 голос
/ 03 февраля 2012

Я новичок в модуле модульного тестирования Visual Studio.Однако я немного поболтал в XUnit (точнее, DUnit).

Я не знаю, почему следующие тесты дают сбой.Исходя из моего кода C # (экспонат A), я думаю, что мои тесты (экспонат B) будут проходить с пресловутыми летающими цветами.

[ПРИЛОЖЕНИЕ A - Соответствующий код]

public class MessageClass
{
    private int _messageTypeCode = 0;
    private int _messageTypeSubcode;
    private int _messageSequenceNumber; 
    private string _messageText;

public MessageClass()
{
    this._messageTypeCode = 0;
    this._messageTypeSubcode = 0;
    this._messageSequenceNumber = 0;
    this._messageText = string.Empty;
}

public void SetMessageTypeSubcode(int AMessageTypeSubcode)
{
    int iMsgTypeSubCode = AMessageTypeSubcode;
    if (iMsgTypeSubCode > 9999)
    {
        iMsgTypeSubCode = 9999;
    }
    else if (iMsgTypeSubCode < 0)
    {
        iMsgTypeSubCode = 42;
    }
    _messageTypeSubcode = AMessageTypeSubcode;
}

public int MessageTypeSubcode()
{
    return _messageTypeSubcode;
}

[ПРИЛОЖЕНИЕ B - Тестовый код в соответствующем MessageClassTest]

[TestMethod()]
public void SetMessageTypeSubcodeTest()
{
    int AMessageTypeSubcode;
    // Should I put this class instantiation in MyTestInitialize?
    MessageClass target = new MessageClass();

    // Test 1
    AMessageTypeSubcode = 0; 
    target.SetMessageTypeSubcode(AMessageTypeSubcode);
    Assert.AreEqual(AMessageTypeSubcode, target.MessageTypeSubcode());

    // Test 2 - 10000 is too much
    AMessageTypeSubcode = 12345;
    target.SetMessageTypeSubcode(AMessageTypeSubcode);
    Assert.AreEqual(9999, target.MessageTypeSubcode());

    // Test 3 - val must be positive
    AMessageTypeSubcode = -77;
    target.SetMessageTypeSubcode(AMessageTypeSubcode);
    Assert.AreEqual(42, target.MessageTypeSubcode());
}

... Ошибка при втором тесте.Установив значение val выше порога (9999), следует назначить его (9999), а не 12345.

Как я уже говорил, я новичок в Visual Studio Unit Testing Framework;Разве нельзя иметь более одного теста в TestMethod?Или мне нужно сделать что-то вроде вызова flush () или finish () или close () или reset () или что-то еще?

1 Ответ

1 голос
/ 03 февраля 2012

Тесты не пройдены, потому что тест должен завершиться неудачей.Ваш метод неверен:

_messageTypeSubcode = AMessageTypeSubcode;

Должно быть:

_messageTypeSubcode = iMsgTypeSubCode ;
...