我有一个使用 FakeitEasy 伪造的服务,我正在尝试调用它的方法。这是代码
var client = container.Resolve<MyService>();
A.CallTo(() => client.GetUserProfile(userName)).Returns(null);
Run Code Online (Sandbox Code Playgroud)
GetUserProfile 方法在实际实现中返回一些对象。但出于某种原因,我希望此方法返回空值。我正在使用上面的代码来实现这个目的,但它返回的是 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");
}
Run Code Online (Sandbox Code Playgroud)
制作方法如下
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;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激
谢谢
尝试输入您的(空)引用。
UserDAO returnValue = null;
var client = container.Resolve<MyService>();
A.CallTo(() => client.GetUserProfile(userName)).Returns(returnValue);
Run Code Online (Sandbox Code Playgroud)
为了配置一个方法,它必须是虚拟的、抽象的或在您伪造的接口上定义的。然而,
\n\npublic UserDAO GetUserProfile(string userName)\nRun Code Online (Sandbox Code Playgroud)\n\n既不是虚拟的也不是抽象的,所以除非你从接口创建一个假的,否则这是行不通的。但是,A.CallTo当尝试配置非虚拟方法或具体(非伪造)对象上的方法时,会引发错误,并且您没有提到发生这些事情。
从你的代码中,我们仍然无法判断
\n\nclient(我知道,容器,但它是怎么到达那里的?),controller使用相同client,以及controller.CheckUsername和之间client.GetUserProfile有什么联系我目前的猜测是
\n\ncontroller使用什么,它都与测试所用的CheckUsername不一样,或者clientclient.GetUserProfile被错误地调用userName(尽管您在 中使用了相同的controller.CheckUsername(userName),所以这似乎不太可能)如果您无法或不愿意连接这些点,我建议检查userName所有点的值,并确保client在生产代码中调用时,它是一个伪造的对象(调试并检查类型\xe2 \x80\x94应该清楚是你的类型还是假的类型)。
| 归档时间: |
|
| 查看次数: |
3005 次 |
| 最近记录: |