假设我有这个接口和这个类:
public interface IScheduler
{
void StopTimer();
// some other methods
}
public class Scheduler : IScheduler
{
private static readonly IScheduler scheduler = new Scheduler();
private readonly Timer timer;
public Scheduler()
{
refreshTimer = new Timer
{
Enabled = false,
AutoReset = false
};
}
public static IScheduler GetScheduler()
{
return scheduler;
}
public void StopTimer()
{
timer.Stop();
}
// some other methods
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否可以从 GetScheduler 方法获得一个模拟实例。我试过这样的事情:
[TestMethod]
public void Execute_ButtonClicked_StopTimer()
{
// arrange
var mockScheduler = Mock.Get(Scheduler.GetScheduler());
var …Run Code Online (Sandbox Code Playgroud) 我有一个非常有趣的行为。我有以下两个测试用例:
[Fact]
public void Ctor_WhenNeverIsTrueAndAfterOcurrenceIsNotNull_HasError()
{
// arrange
var reccurenceEnd = new RecurrenceEnd()
{
IsNever = true,
AfterOccurence = 1
};
// act
var validator = GetValidator();
// assert
validator.ShouldHaveValidationErrorFor(p => p.AfterOccurence, reccurenceEnd);
}
[Fact]
public void Ctor_WhenNeverIsFalseAndAfterOccurenceIsNullAndByDateIsNull_HasError()
{
// arrange
var reccurenceEnd = new RecurrenceEnd()
{
IsNever = false,
AfterOccurence = null,
ByDate = null
};
// act
var validator = GetValidator();
// assert
validator.ShouldHaveValidationErrorFor(p => p.AfterOccurence, reccurenceEnd);
}
Run Code Online (Sandbox Code Playgroud)
在我的验证器上,如果我有以下内容,第一个测试失败,第二个通过。如果我改变规则的顺序,第一个测试通过,第二个失败。
RuleFor(dto => dto.AfterOccurence)
.Cascade(CascadeMode.StopOnFirstFailure)
.Null()
.When(p => p.IsNever == …Run Code Online (Sandbox Code Playgroud)