首页 新闻 会员 周边 捐助

Visual Studio 单元测试的疑问

0
悬赏园豆:50 [已解决问题] 解决于 2014-09-21 10:48

先来点简单的代码:

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

 

这是什么原因呢??

Srouni的主页 Srouni | 初学一级 | 园豆:9
提问于:2014-09-20 23:12
< >
分享
最佳答案
0

理论上不应该有这样的问题吧?只要module等没改变就应该是唯一的。

刚反编译了代码,并没有重写这个函数,使用的是object的gethashcode,而这个方法是来自操作系统(extern函数)。

我没这样实验过,你可以:

1、对consoleapplication重新编译,是否还跟原来的一样?

2、把consoleapplication弄到不同的机器上运行,是否由一样?

3、把机器重新启动后运行consoleapplication是否还一样?

4、通过应用程序A加载一个domain来运行这个consoleapplication,是否也是一样的?

5、写另外一个APPLICATION,引用这个consoleapplication(exe不能引用,使用其它方式强行引用,比如使用assembly的方式加载),执行main里的功能,是否又一样?

6、测试模块的执行其实也就类似上一步的思路,每次执行测试的时候,测试模块的APP都变了,于是出现这样的问题也就能理解了,毕竟object的hashcode是基于内存、运行环境的,并非永远一成不变。

收获园豆:49
519740105 | 大侠五级 |园豆:5810 | 2014-09-21 08:40

有点意思,

谢谢您的回复,我刚刚的表达有误。

Srouni | 园豆:9 (初学一级) | 2014-09-21 10:11
其他回答(1)
0

目标类不一样,但是不影响测试结果

收获园豆:1
Halower | 园豆:1723 (小虾三级) | 2014-09-20 23:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册