2013-08-04 3 views
1

Как вы тестируете на разных языках?Пробные тесты для источников-источников-источников

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

Прямо сейчас у меня есть сценарий, который выполняет исходный вход, запускает его через компилятор, выполняет вывод, а затем строит сравнение результатов. Он чувствует себя неудовлетворительным (малейшая семантическая разница заставляет тесты терпеть неудачу, «1,0» не равно «1», так что тест терпит неудачу и т. Д.), Так есть ли лучшие способы?

ответ

1

Это не похоже на TDD на стандартное приложение (особенно такое, которое взаимодействует с базой данных и т. Д.). Вы можете тестировать компоненты, которые составлены, чтобы изолировать приложение. Затем для теста, о котором вы упомянули выше, вам просто нужно использовать свое лучшее решение, чтобы сделать тест, который все еще позволяет сделать код более гибким, но также тщательно проверяет желаемое поведение.

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

With(int number) 
    {  
     _sourceString += number.ToString(<Assign formatting here>); 
     Return this; 
    } 

Таким образом, если ваши выходы изменяются, вам нужно изменить их только в методе одного строителя.

+0

Спасибо за отзыв. Думаю, мне придется каким-то образом преобразовать выход. – user1953221

1

Тестирование, о котором вы упомянули, не является модульным тестированием. Вы тестируете поведение всего приложения, так что это скорее проверка черного ящика. @grrrrrrrrrrrrrr правильно указал, что модульные тесты должны проверять отдельные методы отдельных классов. Затем вы можете проверить, что, например, небольшая часть кода, содержащая буквальный «1.0», будет корректно преобразована в «1.0f» или что-нибудь приемлемое одним методом, который делает это именно одну вещь (т. Е. Преобразует литералы или что-то еще).