我有一个使用FakeitEasy伪造的服务,我试图调用它的方法。这是代码
var client = container.Resolve<MyService>();
A.CallTo(() => client.GetUserProfile(userName)).Returns(null);
方法GetUserProfile在实际实现中返回一些对象。但由于某种原因,我希望此方法返回null。我使用上面的代码来实现这个目的,但它返回的Fake对象而不是null。
以下是我正在使用的测试设置
[Test]
public void MyTest(string sitecollectionGuid, string customerName)
{
var mockHttpContext = SetupHttpContext(sitecollectionGuid, customerName);
var client = container.Resolve<MyService>();
A.CallTo(() => client.GetUserProfile(userName)).Returns(null);
var controllerContext = new ControllerContext(mockHttpContext, new RouteData(), A.Fake<ControllerBase>());
controller.ControllerContext = controllerContext;
var result = controller.CheckUsername(userName);
Assert.IsNotNull(result, "Result is not as expected");
}
生产方法如下所示
public UserDAO GetUserProfile(string userName)
{
UserDAO objUserProfile = new UserDAO();
IUsers objUsers = (IUsers)Global.Container["Users"];
IUser objUser = objUsers.GetByUserName(userName);
if (objUser == null)
{
return null;
}
else
{
objUserProfile = AutoMapper.Mapper.Map<IUser, UserDAO>(objUser);
objUserProfile.FirstName = objUser.FirstName;
objUserProfile.MiddleName = objUser.MiddleName;
objUserProfile.LastName = objUser.LastName;
....................
....................
<setting other properties>
....................
....................
return objUserProfile;
}
}
任何帮助将不胜感激
由于
答案 0 :(得分:1)
为了配置方法,它has to be virtual, abstract, or defined on an interface that you're faking。但是,
public UserDAO GetUserProfile(string userName)
既不是虚拟的也不是抽象的,所以除非你从界面创建虚假,否则这不起作用。但是,A.CallTo
在尝试在具体(非伪造)对象上配置非虚方法或方法时会引发错误,并且您没有提及这些事情中的任何一种。
从您的代码中,我们仍然无法告诉
client
来自哪里(我知道,容器,但它是如何到达的?),controller
是否使用相同的client
和controller.CheckUsername
和client.GetUserProfile
之间的关联是我此时的猜测是
controller
使用CheckUsername
的任何内容,与测试的client
不同,或client.GetUserProfile
调用userName
(尽管您在controller.CheckUsername(userName)
中使用了相同的内容,但这似乎不太可能)如果您无法或不愿意连接点,我建议在所有点检查userName
的值,并确保在生产代码中调用client
时,它& #39;一个伪造的对象(调试并检查类型 - 应该清楚它是你的类型还是假的)。
答案 1 :(得分:1)
尝试输入您的(null)引用。
UserDAO returnValue = null;
var client = container.Resolve<MyService>();
A.CallTo(() => client.GetUserProfile(userName)).Returns(returnValue);
答案 2 :(得分:0)
或者您可以将null转换为上下文中的类型。
var client = container.Resolve<MyService>();
A.CallTo(() => client.GetUserProfile(userName)).Returns((UserDAO) returnValue);