2017-09-05 60 views
1

我正在嘗試爲單元測試目的創建一個存根類。 Stub指向類定義的完全相同,但編譯器認爲它們不同,不知何故。因此,我不斷收到以下消息:無法將'MyClass'轉換爲'MyClass'

無法隱式轉換類型 「MeasurementContracts.Business.Services.EmployeeData」到 「EmployeeData工作」

  • 有對'NO其他定義EmployeeData工作」
  • 出於某種原因,它 「認爲」 有2

這會導致什麼?

enter image description here

類的樣子:

namespace MeasurementContracts.Business.Services 
{ 
    /// <summary>A data service model</summary> 
    public class EmployeeData 
    { 
     public int EmployeeId { get; set; } 

     public string FirstName { get; set; } 

     public string LastName { get; set; } 

     public string MiddleName { get; set; } 

     public string EmailAddress { get; set; } 

     public string KnownAs { get; set; } 

     public string Login { get; set; } 

     public string DomainName { get; set; } 

     public string EmployeeStatusName { get; set; } 

     public string WorkNumber { get; set; } 

     public string SystemPersonType { get; set; } 

     public string PersonType { get; set; } 

     public string CellPhoneNumber { get; set; } 

     public string OrganizationOrCostCenter { get; set; } 

     public string OrganizationalLevel1Description { get; set; } 

     public string PositionName { get; set; } 

     public int SupervisorId { get; set; } 

     public string GetName(bool useKnowAs = true) 
     { 
      if (useKnowAs && !string.IsNullOrWhiteSpace(this.KnownAs)) 
       return $"{this.KnownAs} {this.LastName}"; 

      return $"{this.FirstName} {this.LastName}"; 
     } 

    } 
} 

存根樣子:

namespace MeasurementContracts.UnitTests 
{ 
    using OData.Client; 
    using MeasurementContracts.Business.Services; 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 

    /// <summary>A proxy stub</summary> 
    public class ODataProxyStub : ODataProxy 
    { 
     #region <Constructors> 

     public ODataProxyStub() 
     { 
      Entities = new List<EmployeeData>(); 
     } 

     #endregion 

     #region <Properties> 

     public List<EmployeeData> Entities { get; set; } 

     #endregion 

     #region <Properties> 

     public override EmployeeData GetItem<EmployeeData>(string query) 
     { 
      // This is NOT working? 
      return Entities.FirstOrDefault(); 
     } 

     public override IEnumerable<EmployeeData> GetList<EmployeeData>(string query) 
     { 
      throw new NotImplementedException(); 
     } 

     public override EmployeeData Post<EmployeeData>(string query, IEnumerable<object> parameters) 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 
} 

代理BASE LOOKS LIKE:

namespace OData.Client 
{ 
    public class ODataProxy 
    { 
     protected readonly HttpClient Client; 

     public ODataProxy(); 

     public string BaseUrl { get; set; } 

     public virtual T GetItem<T>(string query); 
     public virtual IEnumerable<T> GetList<T>(string query); 
     public virtual T Post<T>(string query, IEnumerable<object> parameters); 
    } 
} 
+6

您有兩個不同的名稱空間,您需要指定要使用哪一個。 –

+0

@Tamas更改名稱空間路徑不起作用 –

+0

您是否可以在https://stackoverflow.com/help/mcve中複製它? – mjwills

回答

4

其實這並不是指同一類的。實際上,第二個EmployeeData並不是指任何類。這是通用名稱。

ODataProxy定義了一個方法:

public virtual IEnumerable<T> GetList<T>(string query); 
使用

其中ODataProxyStub工具:

public override IEnumerable<EmployeeData> GetList<EmployeeData>(string query) 

這是不是一個特殊版本的EmployeeData類型(一些C#不支持) ,但您只是將其更名爲TEmployeeData

因此編譯器認爲,通用模板參數EmployeeData不能轉化爲具體的類EmployeeData這當然是正確的。


什麼你可能已經打算是:

class ODataProxy<T> 
{ 
    public virtual IEnumerable<T> GetList(string query) 
    { 
    } 
} 

class ODataProxyStub : ODataProxy<EmployeeData> 
{ 
    public override IEnumerable<EmployeeData> GetList(string query) 
    { 
    } 
} 

LINQpad例子來重現問題:

class Data 
{ 
} 

class Proxy 
{ 
    public virtual T Get<T>() 
    { 
     return default(T); 
    } 
} 

class Stub : Proxy 
{ 
    private Data x = default(Data); 

    public override Data Get<Data>() 
    { 
     return x; 
    } 
} 

無法隱式轉換類型 'UserQuery.Data' 來'Data'

+0

看起來像F12鍵很容易找到的東西,你能證實嗎? –

+0

F12什麼都沒做 –

+0

我不能改變ODataProxy的定義 –

相關問題