Reputation: 2388
Consider this Viewmodel:
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
{
}
This might just be a simple example, but I want to test the GoToConfigurationMethod. Inheriting from the base class makes this difficult. This for example does not work:
[Theory]
[AutoDomainData]
public void GoToConfiguration_ActivatesConfigurationView([Frozen]IConfigurationViewModel configVm,MainViewModel sut)
{
sut.GoToConfiguration();
Assert.True(configVm.IsActive);
}
Upvotes: 1
Views: 640
Reputation: 10609
The problem is that because MainViewModel
isn't Active then it won't Activate ConfigurationViewModel
.
[Fact]
public void GoToConfigurationActivatesCorrectViewModel()
{
var configuration = new ConfigurationViewModel();
var main = new MainViewModel(configuration);
ScreenExtensions.TryActivate(main);
main.GoToConfiguration();
Assert.True(configuration.IsActive);
}
This test passes the important line being to Activate the view model first.
Upvotes: 3