我正在使用单元测试的模拟..但是我无法在实现代码中得到模拟和存根之间的区别..模拟实现代码是:-
[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);
}
并且要测试的课程是:-
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 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);
}
请有人告诉我存根和模拟之间的区别以及它在上面代码中的实现..