Обработка нескольких утверждений и неудачный тест, если ни одно не найдено - PullRequest
0 голосов
/ 23 ноября 2018

Я делаю негативный тестовый пример, который проверяет, появляется ли сообщение об ошибке, а затем проверяет правильность сообщения в модальном диалоговом окне.Проблема в том, что приложение имеет два языка: английский и немецкий, поэтому сообщение об ошибке может быть на любом из этих двух языков.Что у меня есть:

productsPage.CreateProduct("Test product-" + "2bd43cfd", "2bd43cfd", ".TEST Product-Buyer", "CC", "HRK", 40.94
string modalMessage = productsPage.errorMsgServiceIdTaken.Text;
try
{
   Assert.AreEqual("A product with identical service id and service provider already exists!", modalMessage);
   test.Log(Status.Pass, "Error message '" + modalMessage + "' was found inside modal dialog.");
}
catch (NUnit.Framework.AssertionException)
{
   test.Log(Status.Warning, "The modal dialog did not contain message '" + modalMessage + "'.");
}
try
{
   Assert.AreEqual("Produkt kann nicht erstellt werden! Ein Produkt mit identischer Dienst Id und Diensteanbieter ist bereits vorhanden!", modalMessage);
}
catch (NUnit.Framework.AssertionException)
{
   test.Log(Status.Warning, "The modal dialog did not contain message '" + modalMessage + "'.");
}
}
catch (Exception e)
{
   test.Log(Status.Fail, "Test execution failed: " + e.ToString());
   throw;
}

Как видите, я хочу использовать два утверждения, потому что сообщение может быть на английском или немецком, но проблема в том, что я хочу провалить тест, если ни один изэти два утверждения проходят.

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Основное правило - всегда знать, что вы проверяете в конкретном тестовом примере.Если в ходе теста неясно, какое сообщение нужно проверить (на английском или немецком языке) в конкретный момент, вам следует помнить, что тест будет «зеленым», если:

  1. У вас есть режим английского языка.в вашем приложении, но текст предупреждения на немецком языке.(звучит как ошибка. верно?)
  2. У вас есть немецкий режим, но предупреждение на английском.(также звучит неправильно)

Я могу придумать 2 решения:

  1. Создать 2 теста и явно пройти «ожидаемый язык»:

    @Test
    public void EnglishTest() {
        //implement logic that will start your app in English mode
        startAppInEnglishMode();
        String expectedMessage = "A product with identical service id and service provider already exists!";
        checkAlert(expectedMessage);
    }
    
    @Test
    public void GermanTest() {
        //implement logic that will start your app in German mode
        startAppInGermanMode();
        String expectedMessage = "Produkt kann nicht erstellt werden! Ein Produkt mit identischer Dienst Id und Diensteanbieter ist bereits vorhanden!";
        checkAlert(expectedMessage);
    } 
    
    public void CheckAlert(string expectedMessage) {
        string modalMessage = productsPage.errorMsgServiceIdTaken.Text;
        try {
            Assert.AreEqual(expectedMessage, modalMessage);
        } catch (NUnit.Framework.AssertionException) {
            test.Log(Status.Warning, "The modal dialog did not contain message '" + modalMessage + "'.");
        }
    }
    
  2. Четко определите, какой режим включен, прежде чем вызывать утверждение

    @Test
    public void singleTestForBothLanguages() {
        boolean isEnglishMode = isEnglishMode();
        string expectedMessage;
        if (isEnglishMode) {
            expectedMessage = "A product with identical service id and service provider already exists!";
        } else {
            expectedMessage = "Produkt kann nicht erstellt werden! Ein Produkt mit identischer Dienst Id und Diensteanbieter ist bereits vorhanden!";
        }
        checkAlert(expectedMessage);
    }
    
    //for example check attribute of some element (maybe a flag? or whatever makes you sure to know which mode is on now)
    public bool isEnglishMode() {
        if ( ....){
            return true;
        }
        return false;
    }
    
    public void CheckAlert(string expectedMessage) {
        string modalMessage = productsPage.errorMsgServiceIdTaken.Text;
        try {
            Assert.AreEqual(expectedMessage, modalMessage);
        } catch (NUnit.Framework.AssertionException) {
            test.Log(Status.Warning, "The modal dialog did not contain message '" + modalMessage + "'.");
        }
    }
    
0 голосов
/ 23 ноября 2018

Вместо этого вы можете использовать метод Assert.True.

Ваш код будет выглядеть так:

Assert.True(modalMessage == "A product with identical service id and service provider already exists!" || 
            modalMessage == "Produkt kann nicht erstellt werden! Ein Produkt mit identischer Dienst Id und Diensteanbieter ist bereits vorhanden!");

Таким образом, вы будете проверять их оба одновременно.

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