c# - 单元测试>检测到无法访问的代码警告

标签 c# unit-testing compiler-warnings wcf-faults

问题

编译器在返回行中给我一条警告消息:

Unreachable code detected

问题

如何重构我的单元测试以免收到编译器警告?也欢迎任何其他反馈。

代码

我有一个包装 WCF 调用的 Bar 类。如果调用中某处发生异常,包装器将记录错误并抛出 WCF 错误。这是类(class):

public class Bar
{
    private readonly ILog _execeptionLog;

    public Bar(ILog execeptionLog)
    {
        if (execeptionLog == null) 
            throw new ArgumentNullException("execeptionLog");

        _execeptionLog = execeptionLog;
    }

    public TResult TryExecute<TResult>(Func<TResult> action)
    {
        if (action == null) 
            throw new ArgumentNullException("action");

        try
        {
            return action.Invoke();
        }
        catch (Exception ex)
        {
            _execeptionLog.Error(ex.ToString());
            var fault = FooFault.CreateFrom(ex);
            throw new FaultException<FooFault>(fault);
        }
    }
}

我尝试对此类进行单元测试,以确保我得到正确细节的错误。这是我的单元测试方法

[Test]
public void TryExecute_ActionThrowsException_FaultDetailIsNotNull()
{
    //Arrange
    var mock = MockRepository.GenerateMock<ILog>();
    var uut = new Bar(mock);
    var ex = new ArgumentException("foo");

    try
    {
        //Act
        int actual = uut.TryExecute(() =>
        {
            throw ex;
            return 1; //<<<<<<<< Unrechable code detected here
        });
    }
    catch (FaultException<FooFault> fault)
    {
        //Assert
        Assert.IsNotNull(fault.Detail);
    }
}

最佳答案

你可以这样做......

int actual = uut.TryExecute<int>(() =>
{
    throw ex;
    // return 1; //<<<<<<<< Unrechable code detected here
});

这是完整的...

var uut = new Bar(null);
var ex = new ArgumentException("foo");
try
{
    int actual = uut.TryExecute<int>(() =>
    {
        throw ex;
    });
}
catch (Exception fault)
{
    Assert.IsNotNull(fault.Message);
}

关于c# - 单元测试>检测到无法访问的代码警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16317238/

相关文章:

c# - 为什么 Assert.AreEqual 在 <Object, Object> 上失败?类型不匹配?

c++ - GCC 不遵守 'pragma GCC diagnostic' 以消除警告

c# - 从嵌套母版页访问用户控件

c# - 将一些 C++ 数组代码转换为 C#

c# - 生成序列的可读单元测试?

c++ - C++将功能标记为实验性/未完全实现

c - 为什么编译器报告 'may be used uninitialised in this function' ?

c# - Entity Framework 和 DbContext - 对象跟踪

c# - 将单个 LINQ 值转换为字符串

javascript - 测试 : You will need to wrap any code with asynchronous side-effects in a run 时出现 Ember 错误