发布以编写以下方法的单元测试xUnit MOQ或N取代c#



我在xUnit中使用Moq和NSubstitue实现单元测试时遇到了问题,其中两个方法在同一行中被调用。

public class Class1{
private TestClient _client;
public Class1(TestClient client){
_client = client;
}
//method to write test
public string GetData(){
var response = _client.GetClient().GetSomeData("user");
return response;
}
}

我尝试实现如下单元测试:

[Fact]
public void TestGetData()
{
//Arrange
var input = "user";
var exceptedResponse = "Succeess";

//Act
TestClient moqClient =  new Mock<TestClient>();
moqClient.Setup(x => x.GetClient().GetSomeData().Returns("Succeess"));
var result = new Class1().GetData();

//Assert
Assert.Equal(exceptedResponse, result);
}

但在安装行运行测试时,我遇到了如下异常。

消息:系统NotSupportedException:不支持的表达式:。。。=>。。。Returns("Succeess",new[]{}(安装程序中不能使用扩展方法(此处:SubstituteExtensions.Returs(/验证表达式。

堆栈跟踪:警卫IsOverridable(MethodInfo方法,表达式表达式(线87表达式扩展.g_Split|5_0(表达式e、表达式&r,方法期望&p、 布尔赋值,布尔allowNonOverridableLastProperty(线234ExpressionExtensions。Split(LambdaExpression表达式,布尔allowNonOverridableLastProperty(线149嘲弄SetupRecursive[TSetup](模拟、LambdaExpression表达式,函数4 setupLast, Boolean allowNonOverridableLastProperty) line 643 Mock.Setup(Mock mock, LambdaExpression expression, Condition condition) line 498 Mock1.Setup[TResult](表达式`1表达式(线452

请帮助我们如何使用Moq或NSubscribe实现对此的嘲讽。

谢谢。

这里真正的问题是GetClient方法返回某个类型,而GetSomeData方法是在该类型上定义的。

因此,让我们假设TestClient。GetClient返回IClient(任意类型,因为问题没有提供类型(。您可以创建一个Mock<IClient>并模拟GetSomeData方法。然后,您应该模拟GetClient方法(如果可能的话(以返回mockClient.Object,这样就可以检索模拟的返回值。

希望有帮助,

相关内容

  • 没有找到相关文章

最新更新