我们对项目中的各种命令进行了很多CanExecute测试。当我们使用Visual Studio测试或AxoCover时,所有测试均正确通过。
我们尝试在执行“ CanExecute”之前添加一些先前的对象初始化,有时它可以工作(或者我们认为如此)。
testedViewModel.Object.InEditMode = inEditMode;
Run Code Online (Sandbox Code Playgroud)
我有一个测试:
[TestCase(true, true, TestName = "Command_InEditMode_CanExecute")]
[TestCase(false, false, TestName = "Command_NotInEditMode_CannotExecute")]
public void CommandCanExecute(bool inEditMode, bool expectedResult)
{
var testedViewModel =
new Mock<SomeViewModel>(inEditMode)
{
CallBase = true
};
testedViewModel.Setup(x => x.InEditMode).Returns(inEditMode);
Assert.AreEqual(expectedResult, testedViewModel.Object.Command.CanExecute(null));
}
Run Code Online (Sandbox Code Playgroud)
有时(并非总是)当詹金斯进行构建和运行单元测试时,一些可以执行的测试失败并显示以下消息:
MESSAGE:
Expected: True
But was: False
+++++++++++++++++++
STACK TRACE:
at Project.CommandCanExecute(Boolean inEditMode, Boolean expectedResult)
Run Code Online (Sandbox Code Playgroud)
问题在于仅在詹金斯身上才发生,并且它是不确定的。
编辑:
好的,还要考虑一件事。属性InEditMode放置在SomeModelView的基础父类中。
我在示例中为您合并了代码。
public BaseViewModel
{
public virtual bool InEditMode {get; set;}
}
public SomeViewModel : BaseViewModel
{
public SomeViewModel () : base …Run Code Online (Sandbox Code Playgroud)