Если PrintStuff
находится в интерфейсе, но ваши утверждения находятся в конкретном классе, кто скажет, что одни и те же утверждения применяются ко всем реализациям? Похоже, что вы действительно хотите заключить контракты с интерфейсом , а не с конкретным классом. Очевидно, вы не можете сделать это в «нормальном» коде C # ...
Теперь я бы предложил использовать Кодовые контракты , которые поддерживают наследование контрактов, включая интерфейсы. Если вы используете редакции Visual Studio Premium или Ultimate, у вас может быть статическая проверка статической проверки того, что вы не нарушаете утверждения. В противном случае, вы вернетесь к насмешкам, я верю. Теперь, если вы используете насмешку, я не думаю, что контракты будут автоматически получены, потому что они обычно применяются с использованием бинарного переписывания ... но я ожидаю, что инструменты в этой области скоро улучшатся. Конечно, в любом случае для насмешек обычно нужно указать входные данные, которые вы ожидаете, поэтому вы должны быть в состоянии убедиться, что они действительны, когда вы все равно пишете свои тесты.
Вы также можете посмотреть на Pex , который исследует ваш код и пытается его взломать.