C# 如何在导体上对ActivateItem进行单元测试
考虑以下Viewmodel:C# 如何在导体上对ActivateItem进行单元测试,c#,wpf,unit-testing,caliburn.micro,C#,Wpf,Unit Testing,Caliburn.micro,考虑以下Viewmodel: public class MainViewModel : Conductor<object> { private readonly IEventAggregator eventAggregator; private readonly IWindowManager windowManager; IConfigurationViewModel configurationViewModel; /// <summary&
public class MainViewModel : Conductor<object>
{
private readonly IEventAggregator eventAggregator;
private readonly IWindowManager windowManager;
IConfigurationViewModel configurationViewModel;
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel(IEventAggregator eventAggregator,IWindowManager windowManager,IConfigurationViewModel configurationViewModel)
{
this.eventAggregator = eventAggregator;
this.windowManager = windowManager;
this.eventAggregator.Subscribe(this);
this.configurationViewModel = configurationViewModel;
}
public void GoToConfiguration()
{
ActivateItem(configurationViewModel);
}
}
public interface IConfigurationViewModel:IScreen
{
}
public class ConfigurationViewModel :Screen, IConfigurationViewModel
{
}
问题在于,由于
MainViewModel
未激活,因此它将不会激活ConfigurationViewModel
[Fact]
public void GoToConfigurationActivatesCorrectViewModel()
{
var configuration = new ConfigurationViewModel();
var main = new MainViewModel(configuration);
ScreenExtensions.TryActivate(main);
main.GoToConfiguration();
Assert.True(configuration.IsActive);
}
此测试通过了重要的一行,即首先激活视图模型
[Fact]
public void GoToConfigurationActivatesCorrectViewModel()
{
var configuration = new ConfigurationViewModel();
var main = new MainViewModel(configuration);
ScreenExtensions.TryActivate(main);
main.GoToConfiguration();
Assert.True(configuration.IsActive);
}