nous écrivons des tests pour une bibliothèque COM écrite en VB 6.0. Le problème auquel nous sommes confrontés est que nous ne pouvons pas accéder aux événements déclarés dans VB (avec des événements). Nous obtenons une exception, "l'objet ne supporte pas l'ensemble des événements". Comment pouvons-nous surmonter ce problème?En utilisant les événements déclarés dans Visual Basic 6.0 dans une application dotnet
Répondre
Par exemple, nous avons une classe en VB 6.0 appelée DatabaseCommand.
Option Explicit
Public Event SavedSuccessfully()
Public Sub Execute(ByVal vAge As Integer, ByVal vName As String, ByVal vAddress As String)
RaiseEvent SavedSuccessfully
End Sub
Maintenant, personclass
Private WithEvents dbCommand As DatabaseCommand
Public Sub Init(ByVal vDBCommand As DatabaseCommand)
Set dbCommand = vDBCommand
End Sub
Private Sub dbCommand_SavedSuccessfully()
'not implemented
End Sub
Maintenant, lorsque vous essayez de tester ce (après la compilation du projet vb)
MockRepository repository = new MockRepository();
PersonLib.DatabaseCommand db = repository.DynamicMock<PersonLib.DatabaseCommand>();
PersonLib.PersonClass person = new PersonLib.PersonClass();
person.Init(db); --- this line throws error - Object or class does not support the set of events
Votre cadre moqueur est le problème ici. L'objet fantaisie retourné par cet appel:
repository.DynamicMock<PersonLib.DatabaseCommand>();
implémente l'interface de la classe DatabaseCommand
, mais ne moque pas de ses événements. Par conséquent, lorsque vous passez une instance de cet objet maquette à votre code VB6, qui s'attend à recevoir un objet DatabaseCommand pouvant déclencher des événements, cela ne fonctionnera pas.
Lorsque vous passez l'objet fantaisie à votre méthode PersonClass.Init
, version ici est simplifiée de ce qui se passe:
Le code arrive à cette ligne dans
PersonClass.Init
:Set dbCommand = vDBCommand
VB6 demande à l'objet sur le côté droit de l'instruction
Set
s'il prend en charge les mêmes événements que la classeDatabaseCommand
(VB6 le fait car vous déclarez ddbCommand
avec le mot-cléWithEvents
, il va donc essayer de configurer un récepteur d'événements pour recevoir des événements de l'objetdbCommand
). L'objet que vous avez transmis, cependant, étant un objet factice et non un objet réelDatabaseCommand
, n'implémente pas réellement les événements que la classeDatabaseCommand
réelle implémente. Lorsque VB6 rencontre cela, cela soulève l'erreur que vous voyez.
Je ne peux pas penser à une façon de faire l'objet fantaisie soutenir les mêmes événements que la classe DatabaseCommand
fait dans l'ordre faire (bien votre travail code de test, je peux penser à une façon, mais cela impliquerait redesigning vos classes), mais je peux poster plus plus tard si je trouve une solution plus raisonnable.
Bonjour, Si vous pouviez poster une autre solution, ce serait génial. –
- 1. Fonction de hachage Visual basic 6.0
- 2. Visual Basic 6 événements
- 3. Déclaration Visual Basic 6.0 vers VB.NET
- 4. Comment faire du développement et construire en Visual Basic 6.0
- 5. Visual Basic 6.0 En passant par problème de référence
- 6. Les propriétés de la classe C# ne sont pas visibles dans Visual Basic 6.0
- 7. Etiquettes en Visual Basic
- 8. Quelle est la meilleure façon de consigner des exceptions dans Visual Basic, sur une application ASP.NET?
- 9. Quelle est la meilleure façon de créer une liste déroulante dans une application Windows en utilisant Visual Basic?
- 10. Comment reconnaissez-vous lorsque l'utilisateur a modifié l'imprimante par défaut de Windows dans Visual Basic 6.0?
- 11. Conversion d'une bibliothèque de classes en une application Web dans Visual Basic?
- 12. Arraylist dans Visual Basic .net
- 13. Hex-Value en Visual Basic
- 14. En dehors de l'espace chaîne dans Visual Basic 6
- 15. Comment afficher les événements dans le calendrier en utilisant Ruby?
- 16. Visual Basic ajouter un événement dans .NET 1.1
- 17. Comment créer une application dans IIS 5.0 en utilisant powershell?
- 18. webbrowser désactiver le débogage de script dans Visual Basic 6
- 19. Comment gérer les événements EndProcess dans une application Vista Console?
- 20. Mot clé global dans Visual Basic 2005?
- 21. Taille de tableau dans Visual Basic?
- 22. Silverlight développement dans Visual Basic 2005
- 23. Comment utiliser un mutex dans Visual Basic
- 24. Audit des données dans NHibernate en utilisant les événements
- 25. Comment implémenter le déplacement de la souris dans Visual Basic?
- 26. Propriétés dynamiques pour les classes en Visual Basic
- 27. Visual Basic 2005 + mysql
- 28. SQL dans dotNET
- 29. Visual Basic 2008 'tests'
- 30. Exécuter les outils sans les fichiers DLL - Visual Basic 2008
Pouvez-vous nous donner un exemple de code? Nous l'avons fait sans problème un certain nombre de fois. – Ant