WPF 응용 프로그램에서 작업 중이며 ModelViewViewModel 디자인 패턴을 사용하고 있습니다. 보기에서 벗어나서 ViewModel 활동을 유발하는 많은 이벤트가 있습니다.WPF MVVM 및 단위 테스트
UnitTest에서 이러한 이벤트를 발생시키는 방법은 무엇입니까? 예를 들어, 드롭 이벤트를 시뮬레이트하고 싶습니다. 스텁 뷰를 만들고 싶지는 않지만 이벤트를 발생시키기 위해서입니다.
모든 의견을 환영합니다.
감사합니다.
WPF 응용 프로그램에서 작업 중이며 ModelViewViewModel 디자인 패턴을 사용하고 있습니다. 보기에서 벗어나서 ViewModel 활동을 유발하는 많은 이벤트가 있습니다.WPF MVVM 및 단위 테스트
UnitTest에서 이러한 이벤트를 발생시키는 방법은 무엇입니까? 예를 들어, 드롭 이벤트를 시뮬레이트하고 싶습니다. 스텁 뷰를 만들고 싶지는 않지만 이벤트를 발생시키기 위해서입니다.
모든 의견을 환영합니다.
감사합니다.
ViewModel 클래스에서 직접 drop 이벤트에 대한 이벤트 처리기를 사용하는 것처럼 들립니다. UI 레이어에 핸들러를 두는 것이 더 바람직할까요? 차례대로 ViewModel에서 함수를 호출할까요? 이 방법을 사용하면 단위 테스트에서 함수를 호출 할 수 있습니다 (ViewModel에 관한 한 드래그 앤 드롭 작업을 시뮬레이트합니다).
또한 ViewModel과 UI 코드를 분리하는 것이 좋습니다.
MVVM 패턴에있어서, 상기 뷰는 뷰 모델에 대해 알고
1 : 당신의 ViewModel에 명령을 노출하고, 그것을 실행하는 데 데이터 바인딩을 사용하여 이벤트를 처리 할 필요가 있다면, 그것을 할 내가 알고있는 두 가지 방법이
있습니다. 이렇게하면
class MyViewModel
{
public ICommand ClickCommand { get; set; }
}
<Button Command="{Binding Path=ClickCommand}" />
그때 당신은 단순히 수동으로 myViewModel.ClickCommand.Execute
를 호출하여 명령을 테스트 할 수 있습니다 : 이것은 내 선호하는 방법, 예를 들면이다.
2 : 는, 뷰 모델의 기능을 노출하고, 쓰기 최소한으로을 .xaml.cs
파일의 이벤트를 처리하고 함수를 호출 예 :
class MyViewModel
{
public void HandleClick(){ }
}
<Button Click="MyClickHandler">
//.xaml.cs file
public void MyClickHandler(Object sender, EventArgs e) {
m_viewModel.HandleClick()
}
이렇게 할 경우, 그러면 myViewModel.HandleClick
을 수동으로 호출하여 테스트 할 수 있습니다. MyClickHandler
코드를 단 하나의 코드로 테스트하는 데 신경 쓸 필요가 없습니다.
이벤트를 발생시키지 마십시오. 핸들러를 호출하면됩니다. 즉, 이벤트 핸들러는 public이어야하며 이벤트 핸들러 중심 인수가 적을 수 있습니다. "조치"를 사용하여 Caliburn (http://www.codeplex.com/caliburn)에서 이것이 어떻게 수행되는지 확인하십시오.
왜 Moq
과 같은 조롱 프레임 워크를 사용하지 않습니까? 빠른 시작을 확인해보십시오. 조롱 이벤트에 관한 샘플이 있습니다. URL : http://code.google.com/p/moq/wiki/QuickStart