class A
{
event EventHandler Event1;
}
var mock = new Mock<A>();
Wie verifiziere ich, dass Ereignis1 ausgelöst wurde (ohne manuelle Ereignisbehandler / ausgelöste Flaggen zu verwenden)?
class A
{
event EventHandler Event1;
}
var mock = new Mock<A>();
Wie verifiziere ich, dass Ereignis1 ausgelöst wurde (ohne manuelle Ereignisbehandler / ausgelöste Flaggen zu verwenden)?
Ich bin mir nicht sicher, ob ich wirklich verstehe, warum Sie das fragen. Wenn Sie eine Mock<A>
dann kontrollieren Sie den Spott, warum also überprüfen, ob er etwas getan hat, was Sie kontrollieren?
Das heißt, obwohl ich Moqs Raise/Raises verwende, verwende ich immer noch oft ein Flag mit einem Lambda, was ich ziemlich sauber finde:
bool eventWasDispatched = false; // yeah, it's the default
var a = new A();
a.Event1 += () => eventWasDispatched = true;
a.DoSomethingToFireEvent();
Assert.IsTrue(eventWasDispatched);
var mock = new Mock<IInterfaceWithEvent>();
mock.Raise(e => e.MyEvent += null, EventArgs.Empty);
mock.VerifyAll();
oder wenn Sie sicherstellen wollen, dass act ein Ereignis auslöst, sollte Ihr Setup wie folgt aussehen:
mock.Setup(foo => foo.Submit()).Raises(f => f.Sent += null, EventArgs.Empty);
// ...
mock.VerifyAll();
Wie wäre es mit etwas wie diesem?
public class MyClass : INotifyPropertyChanged
{
private string _name;
public string Name
{
get => _name;
set
{
_name = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Name)));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
In Ihren Tests:
// This interface contains signatures which match your event delegates
public interface IPropertyChangedEventHandler
{
void PropertyChangedHandler(object sender, PropertyChangedEventArgs e);
}
public void WhenSettingNameNotifyPropertyChangedShouldBeTriggered()
{
// Arrange
var sut = new Mock<MyClass>();
var handler = new Mock<IPropertyChangedEventHandler>();
handler.Setup(o => o.PropertyChangedHandler(sut, new PropertyChangedEventArgs(nameof(MyClass.Name))));
sut.PropertyChanged += handlerMock.Object.PropertyChangedHandler;
// Act
sut.Name = "Guy Smiley";
// Assert
handler.Verify();
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.