Модульные тесты на сравнение текстовых файлов в NUnit

Вы можете использовать JavaPropsMapper из библиотеки Джексона. Но вы должны определить иерархию объектов принимающего объекта json, прежде чем использовать его, чтобы иметь возможность анализировать строку json и создавать из нее объект java.

Как только у вас есть java-объект, успешно созданный из json, вы можете преобразовать его в объект Properties, а затем сериализовать его в файл, и это создаст то, что вы хотите.

Пример json:

{ "title" : "Home Page", 
  "site"  : { 
        "host" : "localhost"
        "port" : 8080 ,
        "connection" : { 
            "type" : "TCP",
            "timeout" : 30 
        } 
    } 
}

И иерархия классов для сопоставления вышеуказанной структуры JSON:

class Endpoint {
    public String title;
    public Site site;
}

class Site {
    public String host;
    public int port; 
    public Connection connection;
}

class Connection{
    public String type;
    public int timeout;
}

Таким образом, вы можете создать из нее объект java Endpoint и конвертировать в объект Properties, а затем вы можете сериализовать в файл .properties:

public class Main {

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        String json = "{ \"title\" : \"Home Page\", "+
                         "\"site\" : { "+
                                "\"host\" : \"localhost\", "+
                                "\"port\" : 8080 , "+
                                "\"connection\" : { "+
                                    "\"type\" : \"TCP\","+
                                    "\"timeout\" : 30 "+
                                "} "+
                            "} "+
                        "}";

        ObjectMapper om = new ObjectMapper();
        Endpoint host = om.readValue(json, Endpoint.class);

        JavaPropsMapper mapper = new JavaPropsMapper();

        Properties props = mapper.writeValueAsProperties(host); 

        props.store(new FileOutputStream(new File("/path_to_file/json.properties")), "");
    }
}

Когда вы откроете файл json.properties, вы увидите вывод:

site .connection.type = TCP

site.connection.timeout = 30

site.port = 8080

site.host = localhost

title = Главная Страница

blockquote>

Идея возникла из этой статьи.

Надеюсь, это будет полезно.

5
задан Adam Tegen 26 September 2008 в 21:54
поделиться

5 ответов

Что касается нескольких тестов с различными данными, используйте расширение NUnit RowTest:

using NUnit.Framework.Extensions;

[RowTest]
[Row("x1.xml", "x2.xml", "x-expected.xml")]
[Row("y1.xml", "y2.xml", "y-expected.xml")]
public void TestGenerate(string pathToInputA, string pathToInputB, string pathToExpectedResult)
 {
      ReportGenerator obj = new ReportGenerator();
      string pathToResult = obj.Generate(pathToInputA, pathToInputB);
      Diff(pathToExpectedResult, pathToResult);
 }
5
ответ дан 14 December 2019 в 09:05
поделиться

Я, вероятно, записал бы тест единого блока, который содержит цикл. В цикле я прочитал 2 XML-файла и различный файл и затем разность XML-файлы (не пишущий это в диск) и сравниваю его с различным файлом, считанным из диска. Файлы были бы пронумерованы, например, a1.xml, b1.xml, diff1.txt; a2.xml, b2.xml, diff2.txt; a3.xml, b3.xml, diff3.txt, и т.д., и цикл останавливаются, когда он не находит следующее число.

Затем можно записать новые тесты только путем добавления новых текстовых файлов.

0
ответ дан 14 December 2019 в 09:05
поделиться

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

32 столбца строки 12 - Найденный 'x', когда 'y' ожидался

Вы могли дополнительно улучшить это путем отображения нескольких строк вывода

Различие в Строке 32 столбца 12, первое показанное различие
A = это - txst
B = это - тесты

Отметьте, как правило, я обычно только генерировал бы через свой код один из этих двух потоков, которые Вы имеете. Другой я захватил бы от теста/текстового файла, проверив глазом или другим методом, что содержавшие данные корректны!

0
ответ дан 14 December 2019 в 09:05
поделиться

Вы, вероятно, просите тестирование против "золотых" данных. Я не знаю, существует ли конкретный термин для этого вида тестирования, принятого глобальный, но это - то, как мы делаем это.

Создайте основной класс приспособления. Это в основном имеет "пустой DoTest (представьте имя файла в виде строки)", который считает определенный файл в память, выполниться, абстрактная строка "метода преобразования Преобразовывают (строковый текст)", затем считайте fileName.gold из того же места и сравните преобразованный текст с тем, что ожидалось. Если содержание отличается, оно выдает исключение. Выданное исключение содержит номер строки первого различия, а также текст ожидаемой и фактической строки. Поскольку текст стабилен, это обычно - достаточно информации для определения проблемы сразу же. Обязательно отметьте строки с "Ожидаемым": и "Фактический": или Вы будете предполагать навсегда, который является который при рассмотрении результатов испытаний.

Затем у Вас будут определенные тестовые приспособления, где Вы реализуете, Преобразовывают метод, который действительно исправляет задание и затем имеет тесты, которые похожи на это:

[Test] public void TestX() { DoTest("X"); }
[Test] public void TestY() { DoTest("Y"); }

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

Затем Вам также будут нужны некоторые данные тестирования и способ, которым Ваше основное приспособление найдет его, несомненно, установит правила о нем для проекта. Если тест перестал работать, эффективная выходная мощность дампа в файл около золота, и сотрите его если тестовая передача. Таким образом, можно использовать различный инструмент при необходимости. Когда нет никаких золотых найденных данных, тестовые сбои с соответствующим сообщением, но эффективная выходная мощность записана так или иначе, таким образом, можно проверить, что это корректно, и скопируйте его для становления "золотыми".

2
ответ дан 14 December 2019 в 09:05
поделиться

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

PS: Но в действительности это было всегда достаточно для меня, чтобы просто сделать простое чтение целого файла к строке и сравнить две строки. Для создания отчетов достаточно видеть, что тест перестал работать. Затем, когда я делаю отладку I обычно разность файлы с помощью Слияния Araxis для наблюдения, где точно у меня есть проблемы.

0
ответ дан 14 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: