Аргумент атрибута (для Result
) должен быть константным выражением. Вы не можете создавать объекты, как сейчас.
Использование атрибута TestCase
подходит для тестирования случаев, когда необходимо проверить несколько простых входов / выходов. Однако в вашем сценарии вы можете сделать что-то вроде этого (то есть, если вы планируете только проверить правильность сопоставления id-кода):
[TestCase(6, Result = "GBP")]
[TestCase(7, Result = "USD")]
[TestCase(8, Result = "CAD")]
public string CanGetCurrencyById(int id)
{
ICurrencyRepo currencies = new RepoFactory().CreateCurrencyRepo(_session);
Currency c = currencies.GetById<Currency>(id);
return c.Code;
}
Кроме того, взгляните на TestCase
документацию - они дают довольно хорошие примеры.
Редактировать :
Под тестированием отображений я имел в виду проверку правильности ваших отображений ORM (от NHibernate до базы данных) и их правильной работы. Вы обычно проверяете это в следующем сценарии:
- Создать новый экземпляр сущности с предопределенными значениями (например,
Currency
)
- Начало новой транзакции
- Сохранить сущность (
Save
+ Flush
+ Evict
комбинация, чтобы NHibernate больше не сохранял сохраненную сущность в кеше)
- Получить сущность
- Сравнить полученные значения с предопределенными
- Откат транзакции
Если такой тест затем проходит, он более или менее говорит вам, что Я могу сохранить эту сущность с этими значениями, а затем могу получить ее с точно такими же значениями . И это все, что вы хотели знать - отображения верны.
С атрибутом TestCase
tho проверить правильность целых объектов довольно сложно - он предназначен для тестирования простых вещей. Вы можете использовать обходные пути, как предложено в другом ответе (передача аргументов через TestCase
), но он быстро становится нечитаемым и сложным в обслуживании (представьте сущность с 6+ свойствами для проверки).
Я предлагаю разделить ваш тест на тот, который проверяет, является ли сопоставление id
к code
правильным (однако я не вижу особого смысла в этом, если только вы не всегда не планируете сопоставлять определенные идентификаторы с определенные коды), а другой проверяет, правильно ли сопоставлен объект Currency
с таблицей базы данных.