У меня есть требование, когда я хочу проверить, изменился ли мой метод во время выполнения. Это специально для тестового примера с использованием устройства. У меня есть шаги в тесте, которые я хочу сохранить в базе данных. Но большую часть времени эти шаги не изменятся, поэтому не нужно перегружать мою базу данных, сохраняя этот шаг в базе данных каждый раз, когда он запускается. Я хочу только сохранить новые шаги, если новые шаги будут добавлены или изменены.
например
[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();
}
Этот хэш-код не меняется, даже если мой метод изменен.
GetHashCode
специально задокументирован как ненадежный как метод хэширования для разных исполнений приложения. Он предназначен только для использования в качестве ключа в структуре данных, основанной на хеше, во время одного выполнения одного приложения, и ничего больше.
Если вы хотите создать хэш, который остается согласованным во всех исполнениях приложения, вам нужно будет использовать другой метод. Например, существуют различные криптографические хэши, которые вы можете использовать, которые будут последовательно создавать один и тот же хеш с одним и тем же вводом.
GetHashCode
, поскольку он может возвращать разные результаты от версии к версии или в разных средах. Вы можете просто сгенерировать хеш из этого байтового массива, чтобы убедиться, что выGetHashCode
реализацииGetHashCode
.