Я работал над приложением Java, где я должен использовать JUnit для тестирования. Я учу это, как я иду. Пока что я нахожу это полезным, особенно когда используется вместе с плагином Eclipse JUnit.
Немного поиграв, я разработал согласованный метод построения модульных тестов для функций без возвращаемых значений. Я хотел бы поделиться этим здесь и попросить других прокомментировать. Есть ли у вас какие-либо предлагаемые улучшения или альтернативные способы достижения той же цели?
Общие возвращаемые значения
Во-первых, есть перечисление, которое используется для хранения значений, представляющих результаты теста.
public enum UnitTestReturnValues
{
noException,
unexpectedException
// etc...
}
Обобщенный тест
Допустим, написан юнит-тест для:
public class SomeClass
{
public void targetFunction (int x, int y)
{
// ...
}
}
Будет создан тестовый класс JUnit:
import junit.framework.TestCase;
public class TestSomeClass extends TestCase
{
// ...
}
В этом классе я создаю функцию, которая используется для каждого вызова тестируемой целевой функции. Он перехватывает все исключения и возвращает сообщение в зависимости от результата. Например:
public class TestSomeClass extends TestCase
{
private UnitTestReturnValues callTargetFunction (int x, int y)
{
UnitTestReturnValues outcome = UnitTestReturnValues.noException;
SomeClass testObj = new SomeClass ();
try
{
testObj.targetFunction (x, y);
}
catch (Exception e)
{
UnitTestReturnValues.unexpectedException;
}
return outcome;
}
}
JUnit Tests
Функции, вызываемые JUnit, начинаются со строчной буквы «test» в имени функции, и они терпят неудачу при первом неудачном утверждении. Чтобы запустить несколько тестов для целевой функции выше, она будет записана в виде:
public class TestSomeClass extends TestCase
{
public void testTargetFunctionNegatives ()
{
assertEquals (
callTargetFunction (-1, -1),
UnitTestReturnValues.noException);
}
public void testTargetFunctionZeros ()
{
assertEquals (
callTargetFunction (0, 0),
UnitTestReturnValues.noException);
}
// and so on...
}
Пожалуйста, дайте мне знать, если у вас есть предложения или улучшения. Помните, что я нахожусь в процессе изучения того, как использовать JUnit, поэтому я уверен, что существуют доступные инструменты, которые могут упростить этот процесс. Спасибо!