使用MsTest的Moq静态隐式运算符

问题描述

我有一个抽象类Enumeration,它实现了IComparable接口。

public abstract class Enumeration : IComparable
{         
    [JsonConstructor]
    protected Enumeration(int id,string name)
    {
        Id = id;
        Name = name;
    }

    public int Id { get; }
    
    public string Name { get; }
   
    public static implicit operator Enumeration(string name)
    {
        return GetAll<Enumeration>().FirstOrDefault(i => i.Name == name);
    }
    
    public static IEnumerable<TEnumeration> GetAll<TEnumeration>() where TEnumeration : Enumeration
    {
        var fields = typeof(TEnumeration).GetFields(
            BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);

        return fields.Select(fieldInfo => fieldInfo.GetValue(null)).Cast<TEnumeration>();
    }

我创建了SampleStatus.cs类,该类继承自Enumeration.cs类。

    public class SampleStatus : Enumeration
    { 
        public static readonly SampleStatus Completed = new SampleStatus(1,nameof(Completed));    
         
        public static readonly SampleStatus Deleted = new SampleStatus(2,nameof(Deleted));    
        
        public SampleStatus(int id,string name) : base(id,name)
        {
        }              
    }

我为SampleStatus.cs类创建了单元测试类。

    [TestMethod]
    public void TestMethod()
    {
        // arrange and act             
        var result = (Enumeration)SampleStatus.GetAll<SampleStatus>().Single(x => x.Id == 1).Name; // output is returning null.

        // assert
        Assert.AreEqual("Completed",result);
    }

当我调用返回空值的GetAll方法时。我在上面的代码中模拟了GetAll和隐式运算符方法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)