先来点简单的代码:
static void Main(string[] args) { MethodInfo methodInfo = typeof(Program).GetMethod("Hi", BindingFlags.Instance | BindingFlags.NonPublic); Console.WriteLine(methodInfo.GetHashCode()); } void Hi() { }
上面的代码是直接写在 ConsoleApplication 中的,这样,多次运行 GetHashCode 的值是恒定不变的,如果把上面的代码直接放到 单元测试 中,每次运行 Hello 后,获得的 HashCode 是不同的,郁闷中...
[TestMethod] public void Hello() { MethodInfo methodInfo = typeof(Program).GetMethod("Hi", BindingFlags.Instance | BindingFlags.Public); }
这是什么原因呢??
理论上不应该有这样的问题吧?只要module等没改变就应该是唯一的。
刚反编译了代码,并没有重写这个函数,使用的是object的gethashcode,而这个方法是来自操作系统(extern函数)。
我没这样实验过,你可以:
1、对consoleapplication重新编译,是否还跟原来的一样?
2、把consoleapplication弄到不同的机器上运行,是否由一样?
3、把机器重新启动后运行consoleapplication是否还一样?
4、通过应用程序A加载一个domain来运行这个consoleapplication,是否也是一样的?
5、写另外一个APPLICATION,引用这个consoleapplication(exe不能引用,使用其它方式强行引用,比如使用assembly的方式加载),执行main里的功能,是否又一样?
6、测试模块的执行其实也就类似上一步的思路,每次执行测试的时候,测试模块的APP都变了,于是出现这样的问题也就能理解了,毕竟object的hashcode是基于内存、运行环境的,并非永远一成不变。
有点意思,
谢谢您的回复,我刚刚的表达有误。
目标类不一样,但是不影响测试结果