但是我发现传统的单元测试不太适合,因为要做爬虫和股票。
网站怎么测试? 股票怎么测试?网络错误怎么测试?
所以查了查资料,发现这世界上有一种称为模拟测试的技术,就是为了应对类似情况。
方法
using Moq;
// Assumptions:
public interface IFoo
{
Bar Bar {
get; set; }
string Name {
get; set; }
int Value {
get; set; }
bool DoSomething(string value);
bool DoSomething(int number, string value);
string DoSomethingStringy(string value);
bool TryParse(string value, out string outputValue);
bool Submit(ref Bar bar);
int GetCount();
bool Add(int value);
}
public class Bar
{
public virtual Baz Baz {
get; set; }
public virtual bool Submit() {
return false; }
}
public class Baz
{
public virtual string Name {
get; set; }
}
// 准备 Mock IFoo 接口
var mock = new Mock<IFoo>();
// 配置准备模拟的方法,当调用接口中的 DoSomething 方法,并传递参数 "bing" 的时候,返回 true
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
// 方法的参数中使用了 out 参数
// out arguments
var outString = "ack";
// 当调用 TryParse 方法的时候,out 参数返回 "ack", 方法返回 true, lazy evaluated
mock.Setup(foo => foo.TryParse("ping", out outString)).Returns(true);
// ref 参数
var instance = new Bar();
// 仅仅在使用 ref 调用的时候,才会匹配下面的测试
mock.Setup(foo => foo.Submit(ref