Во-первых, вы должны везде использовать запечатанные классы и синглтоны - ни один из этих классов-оберток с виртуальными методами, которые можно макетировать, или что-то еще. Далее, и это важно, вы должны использовать Reponse.Write вместо возврата представлений. Это также помогает сериализовать содержимое всех параметров формы, зашифровать их и сохранить их в скрытом вводе на странице, а затем всегда проверять новые параметры по сравнению со старыми, чтобы увидеть, что изменилось. Используя этот способ, вы можете генерировать такие вещи, которые называются «событиями» - они похожи на нажатия кнопок и выбор в Windows Forms. Это гораздо проще для понимания и моделирования в ваших модульных тестах.