Атрибуты являются украшением во время компиляции для атрибута, поэтому все, что вы помещаете в атрибут TestCase, должно быть константой, которую может разрешить компилятор.
[TestCase(typeof(FakePersonRespository))]
[TestCase(typeof(PersonRespository))]
public void CheckRepositoryIsEmptyOnStart(Type personRepoType)
{
// do some reflection based Activator.CreateInstance() stuff here
// to instantiate the incoming type
}
Однако, это становится немного уродливым, потому что я представляю, что ваша две разные реализации могут иметь разные аргументы конструктора.Кроме того, вы действительно не хотите, чтобы весь этот код создания динамических типов загромождал тест.
Возможное решение может быть примерно таким:
[TestCase("FakePersonRepository")]
[TestCase("TestPersonRepository")]
public void CheckRepositoryIsEmptyOnStart(string repoType)
{
// Write a helper class that accepts a string and returns a properly
// instantiated repo instance.
var repo = PersonRepoTestFactory.Create(repoType);
// your test here
}
Внизу есть атрибут тестадолжен принимать постоянное выражение.Но вы можете достичь желаемого результата, отправив код реализации на фабрику.