gpt4 book ai didi

c# - 如何检测方法自上次编译以来是否发生了变化?

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:24 25 4
gpt4 key购买 nike

我有一个要求,我想检查我的方法体是否在运行时发生了变化。这是专门针对使用单元的测试用例。我在测试中有一些步骤要保存在数据库中。但是大多数时候这个步骤不会改变,因此不想通过在每次运行时将这个步骤保存到数据库中来使我的数据库重载。如果添加或修改了新步骤,我只想保存新步骤。

例如

[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 被特别记录为跨应用程序不同执行的哈希方法不可靠。它旨在在单个应用程序的单次执行期间用作基于散列的数据结构中的键,而不是其他任何东西。

如果您想创建一个在应用程序执行过程中保持一致的散列,那么您需要使用不同的方法。例如,您可以使用各种加密散列,它们在给定相同输入的情况下始终生成相同的散列。

关于c# - 如何检测方法自上次编译以来是否发生了变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52591617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com