Как вы тестируете методы, которые принимают перечисления - PullRequest
0 голосов
/ 30 января 2009

У меня уже есть тестовая настройка для этой функции, но я хотел бы знать, является ли это лучшим способом для этого. У меня есть такой метод:

public static string RunTableInfoCommand(IMapinfoWrapper wrapper,
                                         TableInfoEnum infoToReturn)
{
  //pass the int value of infoToReturn to underlying COM object eg wrapper.
}

TableInfoEnum выглядит следующим образом (сокращенная версия):

public enum TableInfoEnum
{
   TAB_INFO_NAME = 1,
   TAB_INFO_NUM = 2,
   TAB_INFO_TYPE = 3,
   TAB_INFO_NCOLS = 4,
   TAB_INFO_MAPPABLE = 5,
   TAB_INFO_READONLY = 6,
   TAB_INFO_TEMP = 7
 }

Когда я передаю enum в COM-объект, он возвращает разные строковые результаты в зависимости от значения enum. например,

TAB_INFO_NAME = "Water_Mains"
TAB_INFO_NUM = "1"

COM-объект всегда будет возвращать строку, просто отличающиеся значениями на основе значения enum.

Как мне проверить, что моя RunTableInfoCommand работает нормально, пока у меня есть такой тест:

public void RunTableInfoCommandPassingTableNumberShouldReturnExpectedName()
{
  string ExpectedCommand = "TableInfo(1,{0})".FormatWith((int)TableInfoEnum.TAB_INFO_NAME);

  mockmapinfo.Expect(m => m.Evaluate(ExpectedCommand))
             .Returns("Water_Mains");

  string name = Table.RunTableInfoCommand(mockmapinfo.Object,
                                                    1,
                                                    TableInfoEnum.TAB_INFO_NAME);

   Assert.AreEqual("Water_Mains", name);
 }

Это работает, но я просто чувствую, что что-то упустил, как вы тестируете для всех различных типов перечислений.

Ответы [ 2 ]

2 голосов
/ 30 января 2009

Если я правильно вас понимаю, предполагается, что ваш тестируемый метод передает значение enum в COM-объект и возвращает строку, которую возвращает COM-объект. Поэтому цель теста - убедиться, что метод правильно обращается к COM-объекту.

Я бы смоделировал объект COM, чтобы вернуть ожидаемую строку для каждого значения перечисления, а затем передал бы это методу.

0 голосов
/ 30 января 2009

Ладно, может тогда сделаем петлю. Это пройдет все перечисления и распечатает их. Если вы хотите, чтобы он был полностью автоматическим, вам нужно было бы поместить все правильные значения в массив и заставить компьютер сравнивать их. В любом случае, похоже, что одна важная часть, которую вы пропустили, была петля.

    public CheckAllEnumValues() {
            // somehow construct mockmapinfo here

            TableInfoEnum[] values = Enum.GetValues(typeof(TableInfoEnum));
            foreach(TableInfoEnum v in values) {
                    string result = RunTableInfoCommand(mockmapinfo.Object, v);
                    Console.WriteLine(Enum.GetName(typeof(TableInfoEnum), v) + ": " + result);
            }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...