Использование модульного тестирования Visual Studio 2008 / C # / VS.
У меня есть очень простой метод расширения, который скажет мне, является ли объект определенного типа:
public static bool IsTypeOf<T, O>(this T item, O other)
{
if (!(item.GetType() is O))
return false;
else
return true;
}
Это будет называться как:
Hashtable myHash = new Hashtable();
bool out = myHash.IsTypeOf(typeof(Hashtable));
Метод отлично работает, когда я запускаю код в режиме отладки или отлаживаю свои модульные тесты. Однако в ту минуту, когда я просто запускаю все модульные тесты в контексте, я таинственным образом получаю исключение MissingMethodException для этого метода. Как ни странно, другой метод расширения в том же классе не имеет проблем.
Я склоняюсь к тому, что проблема заключается не в самом методе расширения. Я пытался удалить временные файлы, закрыть / открыть / очистить / перестроить решение и т. Д. Пока ничего не помогло.
Кто-нибудь сталкивался с этим где-нибудь?
Редактировать: Это упрощенный пример кода. По сути, это самый маленький воспроизводимый пример, который мне удалось создать без багажа окружающего кода. Этот индивидуальный метод также генерирует исключение MissingMethodException при вводе в модульный тест, как описано выше. Код, о котором идет речь, не завершает поставленную задачу, как упоминал Джон, это скорее источник исключения, к которому я сейчас отношусь.
Решение: Я пробовал много разных вещей, соглашаясь с мнением Марка о том, что этот вопрос является справочным. Удаление ссылок, очистка / восстановление, перезапуск Visual Studio не работали. В конечном итоге я закончил поиском скомпилированной DLL на своем жестком диске и удалил ее из любого места, которое не имело смысла. После удаления всех экземпляров, кроме тех, которые находятся в папке TestResults, я смог перестроить и повторно запустить модульные тесты.
Что касается содержания метода, именно в модульном тестировании я обнаружил проблему и так и не смог заставить концепцию работать. Поскольку O - это RunTimeType, у меня нет особого доступа к нему, и я пытался использовать IsAssignableFrom (), чтобы функция возвращалась правильно. В настоящее время эта функция была удалена из моих методов проверки для повторного использования в другое время. Тем не менее, до того, как я это удалил, я все еще получал исходную проблему, которая начинала этот пост многими другими методами.
Пост-решение: Реальный метод был не так сложен, как я его представлял. Вот фактический метод работы:
public static void IsTypeOf<T>(this T item, Type type)
{
if (!(type.IsAssignableFrom(item.GetType())))
throw new ArgumentException("Invalid object type");
}
и юнит-тест для его проверки:
[TestMethod]
public void IsTypeOfTest()
{
Hashtable myTable = new Hashtable();
myTable.IsTypeOf(typeof(Hashtable));
try
{
myTable.IsTypeOf(typeof(System.String));
Assert.Fail("Type comparison should fail.");
}
catch (ArgumentException)
{ }
}