Как я могу определить, изменился ли метод с момента его последней компиляции?

2

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

например

[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();
}

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

  • 0
    Поэтому ваш вопрос не в том, как определить, был ли метод изменен во время выполнения. Вы хотите отладить свой код, который вычисляет хэш тела метода. Это другое. Если вам нужна помощь в отладке вашего кода, покажите ваш реальный код, входные данные, ожидаемый результат и то, что вы пытались устранить эти различия. Прочитайте, как спросить .
  • 0
    Меня устраивает. Разный код приводит к разным хэшам. Однако вы не должны полагаться на GetHashCode , поскольку он может возвращать разные результаты от версии к версии или в разных средах. Вы можете просто сгенерировать хеш из этого байтового массива, чтобы убедиться, что вы GetHashCode реализации GetHashCode .
Теги:
reflection

1 ответ

1
Лучший ответ

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

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

  • 0
    Можете ли вы предоставить какую-либо библиотеку / пакет для создания согласованного хэш-кода?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню