验证私有方法获取调用单元测试
Verify a private method gets call Unit Test
我有一个接口,方法如下:
public string GetImageSrc(string input);
其实现如下:
public string GetImageSrc(string input)
{
if (input.ContainsImage())
{
DoWork();
}
return input;
}
我的 ConatinsImage 字符串扩展名是:
public static bool ContainsImage(this string input)
{
if (!string.IsNullOrEmpty(input))
{
return input.Contains("img");
}
return false;
}
DoWork 是 class 中的私有方法。我正在为 class 编写单元测试 - 我将 null 传递给该方法并断言返回 null。但是,有没有一种方法可以断言 DoWork 私有方法的调用是 None 用于空输入?
我建议使用 DoWork() 方法创建一个新接口 IWorker,然后将其注入到包含 GetImageSrc() 方法的 class 的构造函数中。在你的单元测试中,你可以注入接口的模拟对象,并验证 DoWork() 是否被调用:
public interface IWorker
{
void DoWork();
}
public class YourClass
{
private readonly IWorker _worker;
public YourClass(IWorker worker)
{
_worker = worker;
}
public string GetImageSrc(string input)
{
if (input.ContainsImage())
{
_worker.DoWork();
}
return input;
}
}
使用 Microsoft.VisualStudio.TestTools.UnitTesting 和最小起订量进行测试:
[TestMethod]
public void GetImageSrc_GivenNull_ReturnsNull_And_WorkerNotCalled()
{
var mockWorker = new Mock<IWorker>();
var testSubject = new YourClass(mockWorker.Object);
var response = testSubject.GetImageSrc(null);
Assert.IsNull(response);
mockWorker.Verify(x => x.DoWork(), Times.Never());
}
我有一个接口,方法如下:
public string GetImageSrc(string input);
其实现如下:
public string GetImageSrc(string input)
{
if (input.ContainsImage())
{
DoWork();
}
return input;
}
我的 ConatinsImage 字符串扩展名是:
public static bool ContainsImage(this string input)
{
if (!string.IsNullOrEmpty(input))
{
return input.Contains("img");
}
return false;
}
DoWork 是 class 中的私有方法。我正在为 class 编写单元测试 - 我将 null 传递给该方法并断言返回 null。但是,有没有一种方法可以断言 DoWork 私有方法的调用是 None 用于空输入?
我建议使用 DoWork() 方法创建一个新接口 IWorker,然后将其注入到包含 GetImageSrc() 方法的 class 的构造函数中。在你的单元测试中,你可以注入接口的模拟对象,并验证 DoWork() 是否被调用:
public interface IWorker
{
void DoWork();
}
public class YourClass
{
private readonly IWorker _worker;
public YourClass(IWorker worker)
{
_worker = worker;
}
public string GetImageSrc(string input)
{
if (input.ContainsImage())
{
_worker.DoWork();
}
return input;
}
}
使用 Microsoft.VisualStudio.TestTools.UnitTesting 和最小起订量进行测试:
[TestMethod]
public void GetImageSrc_GivenNull_ReturnsNull_And_WorkerNotCalled()
{
var mockWorker = new Mock<IWorker>();
var testSubject = new YourClass(mockWorker.Object);
var response = testSubject.GetImageSrc(null);
Assert.IsNull(response);
mockWorker.Verify(x => x.DoWork(), Times.Never());
}