2016-07-25 34 views
3

爲了方便測試,我把一個Resharper source template來快速創建與NSubstitute一類的替代品。ReSharper的源模板添加空語句

[SourceTemplate] 
public static void substitute<T>(this T o, 
    [Macro(Expression = "guessExpectedType()", Editable = -1)] string type) 
    where T : class 
{ 
    //$ o = Substitute.For<$type$>(); 
} 

假設一個字段,private ILogger logger;已定義,這讓我鍵入logger.sub(ReSharper的從那裏表明完全法名),以產生logger = Substitute.For<ILogger>();

我仍然有兩個問題我一直沒能搞清楚。

1)有時它把替換代碼之前空語句,即

; 
logger = Substitute.For<ILogger>(); 

這似乎每當有替換線以下語句發生。然後,Resharper會建議可以刪除空的語句。爲什麼這是一開始就添加的,我怎樣才能防止它呢?

2)如果NSubstitute已經被導入類(using NSubstitute;),它只能正確猜測替代類型。沒有它,我得到logger = Substitute.For<object>();和建議進口NSubstitute。是否有更好的宏表達式來解決字段類型?或者,有沒有辦法讓它導入名稱空間,如果它尚未被導入?

回答

1
  1. 這聽起來像一個錯誤 - 請你能file an issue
  2. 嘗試,包括註釋代碼的命名空間。 ReSharper的將縮短引用,並自動命名空間在文件的頂部添加到using語句列表:

    //$ o = NSubstitute.Substitute.For<$type$>();

+0

解決問題2完美!謝謝! –