Как я могу определить, изменился ли метод с момента его последней компиляции? - PullRequest
0 голосов
/ 01 октября 2018

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

например,

[Test]
 public void Should_Pass_When_SomethingHappened()
      {
        File.Open(TestFile);      //step 1
        File.Close()   //step2 
     }

Теперь, если кто-то изменит этот метод, скажем ниже

[Test]
 public void Should_Pass_When_SomethingHappened()
      {
        File.Open(TestFile); //step1 
        File.Copy(Source, Desitnation); //step2      
        File.Close(); //step 3
     }

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

Я пробовал это:

public int CheckIfMethodIfModified()
{
   Type TestType = typeof(MyTypeName);
   MethodInfo myMethodInfo = 
   TestType.GetMethod("Should_Pass_When_SomethingHappened");
   MethodBody mb = myMethodInfo.GetMethodBody();
   string result = System.Text.Encoding.UTF8.GetString(mb.GetILAsByteArray());
   result.GetHashCode();
}

Этот хэш-кодне меняется, даже если мой метод изменился.

1 Ответ

0 голосов
/ 01 октября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...