Gibt es eine Möglichkeit zu wissen, in VB.NET wenn ein handler registriert wurde, für eine Veranstaltung?
In C# kann ich testen für diese...
public event EventHandler Trigger;
protected void OnTrigger(EventArgs e)
{
if (Trigger != null)
Trigger(this, e);
}
Gibt es eine Möglichkeit, dies zu tun in VB.NET? Test auf null-ich meine?
MEHR INFO
Ich vergessen zu erwähnen. Ich habe Klassen in C# geschrieben, aber ich Schreibe meine unit-tests in VB.NET.
Ich versuche diese in der unit-test...
If myObject.Trigger IsNot Nothing Then
''#do something
End If
Dies führt zu einem compile-Zeit-Fehler, die sagt ... " - Öffentliche Veranstaltung-Trigger ist ein Ereignis und kann nicht direkt aufgerufen werden. Verwenden Sie die RaiseEvent-Anweisung, um ein Ereignis auszulösen."
Seth
- PS...mein Punkt ist, dass ich DON"T wollen, um das Ereignis auslösen. Ich eigentlich TUN möchten, überprüfen Sie es für die Nichtigkeit, denn das ist, was ich bin-unit-Tests für. Seth
- Ich habe die Antwort auf die Frage unten. Aber ich würde auch vorschlagen, dass das, was Sie sein sollte testen, dass versucht wurde, registrieren Sie einen event-handler, nicht, dass es tatsächlich registriert wurde (da wäre das testen von CLR-Funktionen, die bereits auch getestet.) Genauer gesagt, betrachten Sie mit einem mock-Objekt die ist einfacher gemacht mit frameworks wie Rhino.Mocks, Moq oder TypeMock Isolator.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine interessante Diskussion in Frage Eine Million eins hundert neun und zwanzig tausend fünf hundert siebzehn um, wie dies zu tun genau das, was in C#.
Da die Klasse enthält, die Veranstaltung wurde in C# geschrieben, die Stellvertretung Semantik gelten, und diese Techniken sollen für Sie arbeiten. Allerdings werden Sie brauchen, um zu übersetzen, die Quelle zu VB.NET für Ihre unit-test.
Gegeben folgende Klasse in C# - assembly:
Hier einige VB.NET code wird korrekt bestimmen, wenn ein handler registriert wurde, für das Trigger-Ereignis:
Ja. null heißt "Nothing" in Visual Basic.
Update
Obigen Antwort beschrieben, wie um etwas zu prüfen, für null in VB .NET. Leider, Ereignisse werden behandelt, besonders durch die VB.NET compiler.
Für dieses Ereignis definition:
Verwenden Sie diesen code, um zu überprüfen für Abonnements
Bemerken, wie VB.Net Hinzugefügt wurde ein Feld mit dem suffix
Event
zu repräsentieren, delegieren. Eine schauen Sie hier für eine Erklärung.Zuerst von allen, gibt es ein problem mit Ihrem c# - code. Es Lesen sollten, wie dies zur Verringerung der Wahrscheinlichkeit eines race-Bedingung, auf die Beseitigung der letzten handler in einem separaten thread in der falschen Zeit (Hinweis auf, warum es funktioniert: Multi-cast delegates sind unveränderlich):
Zweitens, es gibt keine Notwendigkeit, für das dieser code überhaupt in VB.Net. VB behandelt die Ereignisse etwas anders, so dass Sie, sollten Sie nicht überprüfen, ob alle Handler registriert werden. Es ist sicher und lieber nur das Ereignis auslösen:
Glaube ich, dass die syntax, die ich verwenden für diese in VB.Net ist:
Obwohl TriggerEvent nicht angezeigt werden, deklariert der compiler wird es verstehen.Es näher emuliert die C# - syntax. Auch habe ich gelesen, somehere, dass der code mit diesem handler asssigned check läuft fater, aber ich kann nicht zeigen Sie auf, dass in dem moment, so dass youcan nehmen oder lassen, die.
Ich denke, dass ist die sytax, sowieso. Bitte nicht auf mich Schießen, wenn es nicht ganz richtig!!!!
Sollten Sie nicht über ein unit-test überprüfen, um zu sehen, wenn ein handler registriert ist. Wie würden Sie wissen, ob es die richtige handler, oder wenn es war der richtige handler wurde aber nicht ordnungsgemäß verhält?
Was ist der Sinn des test?
Es ist eine interessante Sprache "feature" in VB .NET. Eine member-variable erstellt, die für Veranstaltungen durch die Delegierten:
Können Sie tatsächlich Holen Sie sich die Aufruf-Liste auf diese Weise.