C# 使用Moq创建具有构造函数的模拟类型
我刚刚开始在一个简单的方法上进行单元测试,我被困在下面一行(特别是web服务对象): 起初,我尝试使用接口来模拟HttpContext调用,但我在这方面遇到了困难,所以我想知道是否可以模拟web服务?类似于下面的内容,但是我不知道如何将这个模拟对象“注入”到getToken方法/类中C# 使用Moq创建具有构造函数的模拟类型,c#,.net,unit-testing,mocking,moq,C#,.net,Unit Testing,Mocking,Moq,我刚刚开始在一个简单的方法上进行单元测试,我被困在下面一行(特别是web服务对象): 起初,我尝试使用接口来模拟HttpContext调用,但我在这方面遇到了困难,所以我想知道是否可以模拟web服务?类似于下面的内容,但是我不知道如何将这个模拟对象“注入”到getToken方法/类中 var webServiceMock = new Mock<WebService>("http://test.example.com", "/test/file/path"); //maybe some
var webServiceMock = new Mock<WebService>("http://test.example.com", "/test/file/path");
//maybe something along this syntax?
webServiceMock.Setup(it => it.CreateGetMethod(uri)).Returns(mockWebService.Object);
类的较大片段以供参考:
WebService ws = new WebService("https://example.com", HttpContext.Current.Server.MapPath("~/Config/agent.txt"));
ws.BasicAuthUsername = "username";
ws.BasicAuthPassword = "pass1234";
SecurityToken token = ws.GetIssuedTokenType(audience, nameId, values, type);
模拟测试:
var mock = new Mock<ITokenProvider>();
mock.Setup(m => m.GetToken()).Returns("test-token-1");
var mock=new mock();
Setup(m=>m.GetToken()).Returns(“test-token-1”);
Moq模拟接口的方法和属性。只有接口的具体实现才有构造函数。所以,创建一个接口,您的服务将实现并模拟它。所以,如果我想模拟这些对象,每个对象都需要一个带有测试和非测试实现的接口?所有这些都需要作为类本身的构造函数参数添加?您可以有一个接口,并以各种方式实现它,比如说真实实现和测试/存根实现。或者是后面的一个-只是模拟这个接口。如果字段是对ws的后续调用以获取和设置,那么可以向接口添加字段吗?请详细说明。接口是一个契约,它通常只有方法,很少有属性。听起来您想创建一个存根实现:您将某个内容传递给它的ctor,进行调用,它将返回您传递的内容。这是一种选择。另一种方法是使用Setup()和Moq中的Return()。
WebService ws = new WebService("https://example.com", HttpContext.Current.Server.MapPath("~/Config/agent.txt"));
ws.BasicAuthUsername = "username";
ws.BasicAuthPassword = "pass1234";
SecurityToken token = ws.GetIssuedTokenType(audience, nameId, values, type);
interface ITokenProvider
{
string GetToken();
}
public class WebTokenProvider
{
public string GetToken
{
// your actual implementation
}
}
var mock = new Mock<ITokenProvider>();
mock.Setup(m => m.GetToken()).Returns("test-token-1");