使用Moq和泛型拳击问题

时间:2012-05-07 18:32:29

标签: unit-testing tdd moq

我尝试使用Moq和nunit制作一个通用的辅助方法,如下所述

public void PrepareWebRequest<T>() where T : new()
    {            
        httpCommunicator = new Mock<IHttpCommunicator>();
        httpCommunicator.Setup(x => x.Post(It.IsAny<Object>(),
                                                      It.IsAny<string>())).Throws<T>();

        service = new ApiClient(httpCommunicator.Object);
    }

但是这会导致以下错误:

类型'T'不能在泛型类型或方法'Moq.Language.IThrows.Throws()'中用作类型参数'TException'。没有从'T'到'System.Exception'的装箱转换或类型参数转换。

我知道可以通过不在Moq上使用泛型方法来重构,但是我真的想知道我做错了什么。

祝你好运 拉斯穆斯

1 个答案:

答案 0 :(得分:0)

问题是Where子句中缺少异常。应该是

public void PrepareWebRequest<T>() where T : Exception, new()
{            
    httpCommunicator = new Mock<IHttpCommunicator>();
    httpCommunicator.Setup(x => x.Post(It.IsAny<Object>(),
                                                  It.IsAny<string>())).Throws<T>();

    service = new ApiClient(httpCommunicator.Object);
}