Во-первых, я не думаю, что оригинал слишком плох. Это только грязно, если ваши утверждения отличаются от тестового примера к тестовому.
В любом случае, вы можете использовать тестовый пример, но это невозможно сделать с помощью стандартного атрибута [TestCase] из-за использования более сложных типов. Вместо этого вам нужно использовать общедоступный IEnumerable <> в качестве поставщика данных, а затем пометить свой метод тестирования атрибутом [TestCaseSource] .
Попробуйте что-то вроде:
public IEnumerable<Func<ScriptResource, StartInfo>> TestCases
{
get
{
yield return Platform1StartInfo.CreateOneRunning;
yield return Platform2StartInfo.CreateOneRunning;
yield return Platform3StartInfo.CreateOneRunning;
}
}
[TestCaseSource("TestCases")]
public void MyDataDrivenTest(Func<ScriptResource, StartInfo> startInfoCreator)
{
ScriptResource sr = ScriptResource.Default;
var process = startInfoCreator(sr);
// do asserts
}
}
Это более краткая версия стандартного шаблона выдачи экземпляров TestCaseData, содержащих параметры. Если вы выдаете экземпляры TestCaseData, вы можете добавить больше информации и поведения к каждому тесту (например, ожидаемые исключения, описания и т. Д.), Но он немного более подробный.
Одной из причин, по которой мне действительно нравятся эти вещи, является то, что вы можете создать один метод для вашего 'действия' и один метод для вашего 'утверждения', а затем смешивать и сопоставлять их независимо. Например. вчера мой друг делал что-то, где он использовал два действия, чтобы сказать («когда вызывается метод Blah, этот метод в ViewModel должен быть запущен»). Очень кратко и эффективно!