c# – Intellitest / Pex正在尝试为对象中的私有只读字典字段创
我创建了一个仅包含此类的空类库项目.
public class DictionaryDemo { private readonly Dictionary<string,int> dictionary = new Dictionary<string,int>(); public void Add(string key,int value) { this.dictionary.Add(key,value); } } 从这个课程开始,我使用Intellitest生成了一个测试项目.除了进行一些格式编辑以便在此处发布以进行整理之外,我没有对此测试项目进行任何编辑.这仅包含以下Intellitest测试. [PexClass(typeof(DictionaryDemo)),TestClass] public partial class DictionaryDemoTest { [PexMethod] public void AddTest([PexAssumeUnderTest] DictionaryDemo target,string key,int value) { target.Add(key,value); } } 当我运行Intellitest方法时,我得到以下结果. 实际生成的测试本身似乎是合理的.我不确定低覆盖率是否表明应该生成更多测试以涵盖字典的复杂性,或者是否源于下面的问题. 我的担忧源于警告.我不明白为什么Intellitest会尝试创建这些类型的实例.我最初假设Intellitest试图设置字典字段并使用这些实例来实例化一个新的Dictionary.这是不受欢迎的行为,所以我添加了[PexExplorableFromConstructor(typeof(DictionaryDemo))]属性,它应该(我相信)阻止任何直接设置私有字段,但除了关于猜测如何创建DictionaryDemo消失的警告,结果是相同的. 值得注意的是,它试图在这里创建的许多类型甚至都无法访问. 所以问题基本上是,这里发生了什么?这是Intellitest的预期行为吗?如果这是Intellitest尝试设置字典字段,那就是不需要的行为.我如何阻止它,为什么[PexExplorableFromConstructor]不会阻止它?如果那不是正在发生的事情,为什么要尝试使用所有这些类型? 我已经尝试过的其他东西 我玩过一堆PexCreatable ……和PexExplorable …属性没有成功,包括[PexCreatableByConstructor(typeof(DictionaryDemo),MaySetRemainingFieldsByReflection = false)],这似乎应该明确禁止该字段的设置. 我已经尝试为DictionaryDemo创建一个具有相同结果的工厂. 我尝试添加[PexExplorableFromConstructor(typeof(Dictionary< string,int>))]但这也没有效果. VS 2015和VS 2017 RC之间的行为似乎相同. 解决方法
我在探索使用它来测试我们的代码中没有单元测试的自定义Dictionary类型时遇到了这个问题.
我能够通过创建一个实现接口的类并告诉IntelliTest使用它来解决警告. 这堂课非常简单: public class DefaultEqualityComparer<T> : IEqualityComparer<T> { readonly EqualityComparer<T> _comparer = System.Collections.Generic.EqualityComparer<T>.Default; public bool Equals(T x,T y) => _comparer.Equals(x,y); public int GetHashCode(T obj) => _comparer.GetHashCode(obj); } 在PexAssemblyInfo.cs文件中,我添加了以下属性: [assembly: PexUseType(typeof(DefaultEqualityComparer<int>))] 随着这些变化,我不再收到这个警告.我知道这是一个较老的问题,但我希望别人遇到这个问题,这会对他们有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – 将像素流式传输到OpenGL的现代方法?
- ruby-on-rails – ActionView :: Template :: Error(highch
- cocos2dx popScene 使用 Transition小技巧
- Ajax请求简写
- cocos2dx.2.0升级到3.0 一些常见变化
- c# – 帮助函数用于从字符串安全转换
- 无法找到依赖项com.google.android.gms:play-services-ads
- 检查配置XML树magento生成
- 精华的CocosStudio导入 给CocosCreator用,省了重新设计的时
- ruby-on-rails-3 – “模块不缺少常量模型” – Rails 3错误