.net 存根和模拟实现
可能重复:.net 存根和模拟实现,.net,mocking,stub,.net,Mocking,Stub,可能重复: 我使用的是单元测试的模拟,但在实现代码中我无法区分模拟和存根。。 模拟实现代码是:- [TestFixture] public class MockUser { [Test] public void SaveValidUserFileNameUsingMock() { UserMock um = new UserMock(); um.uName = "";
我使用的是单元测试的模拟,但在实现代码中我无法区分模拟和存根。。 模拟实现代码是:-
[TestFixture]
public class MockUser
{
[Test]
public void SaveValidUserFileNameUsingMock()
{
UserMock um = new UserMock();
um.uName = "";
um.fName = "sfs.jpg";
um.ContentType = "image/jpg";
IUser usr = um;
Assert.AreEqual("E:/image/kawade.jpg", usr.Save(um));
}
}
public class UserMock : IUser
{
public string uName;
public string fName;
public string ContentType;
public string Save(IUser u)
{
if (uName == "" || fName == "")
{
throw new ArgumentException("missing field name");
}
if (ContentType.Contains("image"))
{
string ext = Path.GetExtension(fName);
return (string.Format("E:/image/{0}", this.uName + ext));
}
return "invalid";
}
}
public interface IUser
{
string Save(IUser u);
}
[TestFixture]
public class UserTest
{
[Test]
public void SaveUserValidFile()
{
UserStub su = new UserStub();
su.uName = "kawade";
su.fileName = "sfgs.png";
su.Contenttype = "image/x-png";
su.pName = "sdskjh";
IUser target = su;
}
}
internal class UserStub : IUser
{
public string uName;
public string pName;
public string Contenttype;
public string fileName;
public string Save(IUser u)
{
if (uName == null || pName == null)
{
throw new ArgumentException("user_name or pic_name is required");
}
if (Contenttype.Contains("image"))
{
string ext = Path.GetExtension(fileName);
//return string.Format("C:/test/{0}", this.uName + ext);
Assert.AreEqual("C:/Test/kawade.png", target.Save(su));
}
return "";
}
}
public interface IUser
{
string Save(IUser u);
}
要测试的类别是:-
public class User
{
public string uName;
public string fName;
//private IUser usr;
public void Save(FileUpload fu, User usr)
{
if (uName == null || fName == null)
{
throw new ArgumentException("missing field name");
}
if (fu.PostedFile.ContentType.Contains("image"))
{
string ext = Path.GetExtension(fName);
fu.SaveAs(string.Format("E:/image{0}", this.fName + ext));
}
}
同一个类被用于存根测试。存根测试代码为:-
[TestFixture]
public class MockUser
{
[Test]
public void SaveValidUserFileNameUsingMock()
{
UserMock um = new UserMock();
um.uName = "";
um.fName = "sfs.jpg";
um.ContentType = "image/jpg";
IUser usr = um;
Assert.AreEqual("E:/image/kawade.jpg", usr.Save(um));
}
}
public class UserMock : IUser
{
public string uName;
public string fName;
public string ContentType;
public string Save(IUser u)
{
if (uName == "" || fName == "")
{
throw new ArgumentException("missing field name");
}
if (ContentType.Contains("image"))
{
string ext = Path.GetExtension(fName);
return (string.Format("E:/image/{0}", this.uName + ext));
}
return "invalid";
}
}
public interface IUser
{
string Save(IUser u);
}
[TestFixture]
public class UserTest
{
[Test]
public void SaveUserValidFile()
{
UserStub su = new UserStub();
su.uName = "kawade";
su.fileName = "sfgs.png";
su.Contenttype = "image/x-png";
su.pName = "sdskjh";
IUser target = su;
}
}
internal class UserStub : IUser
{
public string uName;
public string pName;
public string Contenttype;
public string fileName;
public string Save(IUser u)
{
if (uName == null || pName == null)
{
throw new ArgumentException("user_name or pic_name is required");
}
if (Contenttype.Contains("image"))
{
string ext = Path.GetExtension(fileName);
//return string.Format("C:/test/{0}", this.uName + ext);
Assert.AreEqual("C:/Test/kawade.png", target.Save(su));
}
return "";
}
}
public interface IUser
{
string Save(IUser u);
}
请有人告诉我存根和mock之间的区别,以及上面代码中的实现。存根:给你一个股票答案的东西,或者最多,属性包行为,或者只返回void的方法 Fake:提供分段行为的东西,以便您可以人为地测试该类客户机的一些场景 模拟:可以编程的东西,在它被调用的不同时间给出不同的响应。它将让您控制是否要检查调用的顺序。大多数模拟框架也提供了存根功能
上述每种方法的部分变体:通过一个伪方法,可以包装一个存根、另一个伪方法、模拟方法或真实实现,并仅对特定参数执行某些操作 @Mitch Wheat:你是否搜索他与此无关。(几乎)只要谷歌搜索足够长的时间,什么都可以找到。回答问题或将其作为副本关闭。我们确实想在这里提问,并成为编程问题的第一个站点,不是吗?@jgauffin:我花了5秒钟。比海报上写问题所需的时间要短得多。顺便说一句,我投票决定以傻瓜的身份结束。“我建议你也这么做。”米奇·麦特:我想,如果你能在5秒钟内找到它,那没关系。所有的编程问题都应该受到欢迎,即使它们在谷歌很容易找到。我现在投票决定结束这个问题。@jgauffin:我不同意。如果你能在5秒钟内找到一个已有的答案,那就去找它。@Mitch Wheat:Read at meta: