Как вы можете проверить, что функция вызывает другую функцию? - PullRequest
0 голосов
/ 28 января 2020

Я новичок в модульном тестировании, особенно в Dart / Mockito, так что, может быть, я все неправильно подхожу к этому. У меня есть система аутентификации, которая имеет метод registerPreLogoutCallback(PreLogoutCallback callback), который добавляет данный асинхронный обратный вызов в список. Когда вызывается logOut, я использую Future.wait, чтобы дождаться выполнения каждого из этих обратных вызовов, а затем фактически отключить пользователя.

При тестировании метода logOut я хотел бы убедиться, что что любые зарегистрированные обратные вызовы были вызваны. Поэтому я решил, что мне нужно несколько раз вызвать registerPreLogoutCallback в модульном тесте и каким-то образом проверить, что были зарегистрированы зарегистрированные обратные вызовы. Это возможно? Это нарушает цель юнит-теста?

1 Ответ

2 голосов
/ 28 января 2020

Если часть определения logOut состоит в том, что он вызывает PreLogoutCallback, то это часть модульного теста logOut. Можно использовать registerPreLogoutCallback как часть теста, но вы не тестируете registerPreLogoutCallback. Вместо этого registerPreLogoutCallback получает свой собственный модульный тест.

logOut модульный тест будет включать что-то вроде этого неопределенно Javascript -образного псевдокода.

// Set the callback to be a closure around `preLogoutCalled`.
// registerPreLogoutCalled() has its own unit test, we know it works.
var preLogoutCalled = false
registerPreLogoutCallback( function() { preLogoutCalled = true } )

// Logout
logOut()

// Check the callback was called
assert(preLogoutCalled)

Если logOut отвечает за передачу аргументов в обратный вызов, вы можете поместить тесты в сам обратный вызов, чтобы убедиться, что обратный вызов получил правильные аргументы. Допустим, обратный вызов получает текущего пользователя.

logged_in_user = ...

registerPreLogoutCallback(
    function(user) { assertEq(user, logged_in_user) }
)

logOut()

Самое приятное, что он полностью черный ящик . Вызов обратных вызовов является частью определенного поведения logOut. Нет необходимости делать предположения о том, как реализовано logOut().

...