Это сложный вопрос. Некоторые люди считают, что тестировать «закрытый» код можно, а некоторые - нет. Это, безусловно, проще, поскольку вам не нужно выполнять сложные настройки для воспроизведения состояния приложения, которое позволяет вам протестировать небольшую функцию, которую вы хотите добавить (вы можете протестировать эту функцию напрямую). Раньше я был среди этих людей, но теперь я бы сказал, что лучше всего тестировать общедоступные API (создавать тесты и настройки, которые делают и видят только то, что пользователь может делать и видеть). Причина этого заключается в том, что если вы тестируете только публичный API, вы получаете неограниченный потенциал ре-факторинга. Если вы тестируете закрытый код, вам придется изменить свои тесты, если вы решите повторно фактор (что сделает вас менее склонным к «беспощадному рефакторингу», что приведет к плохому коду).
Однако я должен сказать, что тестирование только общедоступных API do приводит к более сложным средам тестирования.
Итак, чтобы ответить на ваш вопрос более конкретно, следующим шагом будет попытка придумать ситуацию, в которой возникнет проблема с вашим текущим кодом отмены заказа, и написать новую высокоуровневую настройку для воспроизведения этой проблемы. Вы упомянули тесты доступа к данным. Создайте высокоуровневую настройку, в которой база данных повреждена, и проверьте, что ваше приложение работает корректно.
О, если для приложений с графическим интерфейсом это немного сложнее, так как вы действительно не хотите переходить к точке, где вы проверяете щелчки мышью и читаете пиксели. Это просто глупо. Если вы используете (и должны использовать) систему MVC, остановитесь на уровне контроллера.