2016-07-25 66 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完美!谢谢! –