Я думаю, что одна из проблем заключается в том, что ваш тест смешивает обязанности sys1, sys2 и sys3 с обязанностями метода TestReport.Мне кажется, что вы должны разделить свои тесты на 2 части:
1) MakeFinancialReport () возвращает объединение sys1, sys2, sys3.Там вы можете заглушить sys1 и т. Д. С чем-то вроде
var sys1 =MockRepository.GenerateStub<ISys>();
sys1.Expect(s=>s.GetData()).Return("Part 1");
// etc... for sys2, sys3 var
reportMaker = new ReportMaker(sys1,sys2, sys3);
Assert.AreEqual("Part 1" + "Part 2" + "Part 3", reportMaker.MakeFinancialReport();
Класс, которому принадлежит метод MakeFinancialReport (), не должен заботиться или знать, что делают классы sys.Они могут вернуть любой класс - MakeFinancialReport () просто объединяет, это то, что вы должны проверить (если считаете, что оно того стоит).
2) Протестируйте метод GetData () из интерфейса sys1, sys2, sys3 Implement.Это, вероятно, когда вы бы проверили, в каких обстоятельствах вы ожидаете увидеть «Тело», «Заголовок» и т. Д.(3 экземпляра sys) и четкое разделение того, что делает sys, и что делает MakeFinancialReport.
Кроме того, это может быть связано с языком, который вы используете, но удивительно, что ваш тест не начинается с создания экземпляра класса, которому принадлежит MakeFinancialReport ().