从测试方法传递空对象
Passing the null object from a test method
我有一个 class Class1
,它有一个构造函数和一些方法。对于这些方法,我正在使用 MSTest 编写单元测试用例。 class 看起来像这样。
class Class1
{
Order order = new Order(); // there is an class Order
public Class1(Order _order)
{
order = _order;
}
public virtual async Task<bool> GetData()
{
if(order != null)
{
//do something
}
else
{
// do something else
}
}
}
现在,我必须为此 GetData() 方法编写 2 个测试用例,一个测试 if 块,一个测试 else 块。我能够成功测试 if 块,但无法测试 else 块。我正在尝试编写的测试方法如下。
[TestMethod()]
public void GetDataTest()
{
Order order = new Order();
order = null;
var mockService = new Mock<Class1>(order)
{
CallBase = true
};
var result = await mockService.Object.GetData(); // error thrown from here
Assert.IsFalse(result);
}
我想做的是将订单对象设置为 null 并将 null 对象传递给 constructor.But 这会引发一些错误 "Ambiguous match found"。显然传递空值在这里不起作用。所以任何人都可以告诉我任何其他解决方法来测试 else 块。
PS:我需要测试 if 和 else 块,以便它包含在代码覆盖率中。
如果您的代码是真实的,那么实际上没有必要模拟被测服务。
这很好用:
[TestMethod]
public async Task GetDataTest()
{
//Arrange
Order order = null;
var c1 = new Class1(order);
//Act
var result = await c1.GetData();
//Assert
Assert.IsFalse(result);
}
嗯,你分享的单元测试用例和代码没有任何问题
除了
您没有返回任务,错误 "ambiguous match found" 看起来像是来自 else 块中编写的代码。
尝试将您的 GetData() 方法更改为:
public virtual async Task<bool> GetData()
{
TaskCompletionSource<bool> ts = new TaskCompletionSource<bool>();
if (order != null)
{
//do something
ts.SetResult(true);
}
else
{
// do something else
ts.SetResult(false);
}
return await ts.Task;
}
您必须 return 来自 "GetData()"
public virtual async Task<bool> GetData()
{
if(order != null)
{
//do something
}
else
{
// do something else
}
//return task here with await keyword;
}
我有一个 class Class1
,它有一个构造函数和一些方法。对于这些方法,我正在使用 MSTest 编写单元测试用例。 class 看起来像这样。
class Class1
{
Order order = new Order(); // there is an class Order
public Class1(Order _order)
{
order = _order;
}
public virtual async Task<bool> GetData()
{
if(order != null)
{
//do something
}
else
{
// do something else
}
}
}
现在,我必须为此 GetData() 方法编写 2 个测试用例,一个测试 if 块,一个测试 else 块。我能够成功测试 if 块,但无法测试 else 块。我正在尝试编写的测试方法如下。
[TestMethod()]
public void GetDataTest()
{
Order order = new Order();
order = null;
var mockService = new Mock<Class1>(order)
{
CallBase = true
};
var result = await mockService.Object.GetData(); // error thrown from here
Assert.IsFalse(result);
}
我想做的是将订单对象设置为 null 并将 null 对象传递给 constructor.But 这会引发一些错误 "Ambiguous match found"。显然传递空值在这里不起作用。所以任何人都可以告诉我任何其他解决方法来测试 else 块。
PS:我需要测试 if 和 else 块,以便它包含在代码覆盖率中。
如果您的代码是真实的,那么实际上没有必要模拟被测服务。
这很好用:
[TestMethod]
public async Task GetDataTest()
{
//Arrange
Order order = null;
var c1 = new Class1(order);
//Act
var result = await c1.GetData();
//Assert
Assert.IsFalse(result);
}
嗯,你分享的单元测试用例和代码没有任何问题
除了
您没有返回任务,错误 "ambiguous match found" 看起来像是来自 else 块中编写的代码。
尝试将您的 GetData() 方法更改为:
public virtual async Task<bool> GetData()
{
TaskCompletionSource<bool> ts = new TaskCompletionSource<bool>();
if (order != null)
{
//do something
ts.SetResult(true);
}
else
{
// do something else
ts.SetResult(false);
}
return await ts.Task;
}
您必须 return 来自 "GetData()"
public virtual async Task<bool> GetData()
{
if(order != null)
{
//do something
}
else
{
// do something else
}
//return task here with await keyword;
}