То, что вы делаете, неверно - когда вы пишете тест, используя только макеты, вы на самом деле ничего не тестируете!
Вместо этого вам нужно ввести некоторый ваш немодальный код, код, который использует объекты, которые вы заменяете на ложные.
Две большие вещи, которые дает вам использование mocks (и в частности фреймворков для mocking, таких как moq):
1 - Изоляция
2 - Проверяемость
Под изоляцией я подразумеваю, что в вашем случае вы не хотите действительно копировать файл каждый раз, когда тестируете действия в своем классе файлового копировального устройства. Таким образом, вы заменяете настоящий копировщик файлов чем-то, что претендует на роль копировщика файлов.
Под проверяемостью я подразумеваю, что часто у классов нет никакого способа сказать вам, были ли они вызваны. Обычно это хорошо, так как сообщать другим людям, если их вызвали, не является частью их работы, но в сценариях тестирования вам нужна эта информация - ожидания в moq позволяют вам ее собрать.
В этом случае похоже, что у вас есть что-то, что вызывает событие, а затем что-то, что прослушивает это событие и вызывает метод copy в вашем FileCopier.
Итак, вы хотите смоделировать источник события (или правильно вызвать конкретный источник события) и затем вызвать это событие.
Затем вам понадобится второй макет - макет FileCopier, который ожидает, что его метод копирования будет вызван с правильными параметрами. Этот макет FileCopier должен передаваться классу, который его вызывает (Dependency Injection), и это позволяет вам подтвердить, что метод copy вызывается вашим реальным кодом.