Задания подразумевают консольный ввод/вывод, поэтому делаете консольное приложение. Но для того, чтобы можно было прицепить unit-тесты, в самом приложении исходные данные и результат заворачивать в массив строк, а логику вынести в отдельный класс, который потом и протестировать, передавая ему массивы строк с тестовыми данными.