这应该是一个简单的(我是Shimming的新手......)
using(ShimsContext.Create())
{
ShimHttpWebRequest.Constructor = @this =>
{
var shim = new ShimHttpWebRequest(@this);
shim.GetResponse = () =>
{
return new ShimHttpWebResponse();
};
};
ShimWebRequest.CreateString = (url) =>
{
return new ShimHttpWebRequest();
};
var http = WebRequest.Create("http://moomoo.moomoo") as HttpWebRequest;
var r = http.GetResponse() as HttpWebResponse;
}
所以没有垫片,这个测试会失败,因为没有这样的url,它将无法解决。使用垫片它工作正常。事情是,如果然后创建我想要测试的类并调用以相同方式创建HttpWebRequest的方法,则看起来shim magic不起作用,它确实尝试解析url。我以前用SmtpClient进行了类似的测试,这样可行,所以我无法理解为什么我的方法创建这些对象的行为会有所不同。
有关此的任何想法/经验吗?
更新1
我班上的代码:
public void METHODNAME()
{
try
{
// Request the login page
Uri url = new Uri(BaseUrl + "logon.aspx");
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.AllowAutoRedirect = false;
request.CookieContainer = Cookies;
// Exception raised below
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
etc....
所以这是一个非常基本的方法
更新2
刚刚将其添加到我正在测试的类中:
public void test()
{
var http = WebRequest.Create("http://moomoo.moomoo") as HttpWebRequest;
var r = http.GetResponse() as HttpWebResponse;
}
它工作正常..所以在另一种方法中必定存在一些差异..但我当然看不到任何明显的东西。将在/如果我找到解决方案时更新
答案 0 :(得分:3)
你唯一的一个垫片来自Create方法的字符串变体。您正在调用Url变体:
电流:
ShimWebRequest.CreateString = (url) =>
{
return new ShimHttpWebRequest();
};
对于创建的网址变体:
ShimWebRequest.CreateUrl = (url) =>
{
return new ShimHttpWebRequest();
};