using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Moq;
using Moq.Internals;
using Moq.Language;
using Moq.Protected;
using Xunit;
using Xunit.Abstractions;
using Xunit.Extensions;
using Xunit.Sdk;
using MoqStudy.MockModel;
namespace MoqStudy.Test
{
///
/// Moq 模拟框架学习
///
public class MoqStudyTest
{
#region 创建Mock对象
///
/// 使用默认设置创建默认对象
///
[Fact]
public void Create_Default_Mock_Test()
{
var mock = new Mock();
mock
.Setup(t => t.Add())
.Returns(88);
var teacher = mock.Object;
Assert.NotNull(teacher);
Assert.Equal(0, teacher.GroupId);
Assert.Equal(88, teacher.Add());
}
///
/// 给对象构造函数传递参数,创建对象
///
[Fact]
public void Create_Params_Mock_Test()
{
var groupId = 8;//Teacher类,构造函数的参数
var addResult = 88;
var mock = new Mock(groupId);
mock.Setup(t => t.Add()).Returns(addResult);
var teacher = mock.Object;
Assert.NotNull(teacher);
Assert.Equal(groupId, teacher.GroupId);
Assert.Equal(addResult, teacher.Add());
}
///
/// 使用MockBehavior选项设置,创建默认对象
/// MockBehavior.Default 默认值即是 MockBehavior.Loose
/// MockBehavior.Loose 宽松模式:未显式设置的,取默认值
/// MockBehavior.Strict 严格模式:未显式设置的,报异常
///
[Fact]
public void Create_MockBehavior_Mock_Test()
{
var mock = new Mock(MockBehavior.Loose);
mock.Setup(t => t.Add()).Returns(88);
var teacher = mock.Object;
Assert.NotNull(teacher);
Assert.Equal(0, teacher.GroupId);
Assert.Equal(88, teacher.Add());
}
///
/// 使用MockBehavior选项设置,并传递参数给构造函数,创建对象
///
[Fact]
public void Create_MockBehaviorAndParams_Mock_Test()
{
var groupId = 9;
var addResult = 88;
var mock = new Mock(MockBehavior.Loose, groupId);
mock.Setup(t => t.Add()).Returns(addResult);
var teacher = mock.Object;
Assert.NotNull(teacher);
Assert.Equal(groupId, teacher.GroupId);
Assert.Equal(addResult, teacher.Add());
}
#endregion
}
}