В принципе, правильно понимаешь.
Юнит-тесты призваны обеспечить проверки двух типов - проверка результатов и проверка поведения.
К примеру, тестируем метод сортировки массива строк.
Первая проверка очевидна:
sort({"c", "a", "b"}) -> {"a", "b", "c"}
Со вторым кейсом сложнее:
sort(null)
sort({})
sort({"a"})
sort({"c", null "b"})
sort({"c", "", "b"})
sort({"b", "a", "b"})
Сложнее, потому что на этом этапе надо сообразить, какой набор входящих данных может оказаться критическим (в зависимости от используемого алгоритма) и обеспечить необходимые проверки того, что тестируемый метод ведет себя корректно.