Chúng tôi có một thành phần COM do nhà sản xuất được viết bằng C++. Bây giờ chúng ta muốn kiểm tra các chức năng và sự kiện của nó trong một dự án thử nghiệm C#. Các bài kiểm tra hàm khá đơn giản. Tuy nhiên, các sự kiện không bao giờ được kích hoạt.Kiểm tra đơn vị sự kiện COM?
MyLib.MyClass m = new MyLib.MyClass();
Assert.IsTrue(m.doStuff()); // Works
// This does not work. OnMyEvent is never called!
m.MyEvent += new MyLib.IMyClassEvents_MyEventHandler(OnMyEvent);
m.triggerEvent();
Tôi đã googled điều này và đọc về các sự cố tương tự tại đây trên StackOverflow. Tôi đã thử tất cả các phương pháp được đề xuất nhưng không thể làm cho nó hoạt động!
Cho đến nay tôi đã thử chạy thử nghiệm của mình với số active dispatcher nhưng không thành công. Tôi cũng đã cố gắng tự bơm các thông điệp trong chủ đề chính bằng cách sử dụng Dispatcher.PushFrame()
. Không có gì. Sự kiện của tôi không bao giờ kích hoạt. Tôi đã tạo một dự án WinForms đơn giản và xác minh rằng các sự kiện của tôi hoạt động trong một thiết lập bình thường. Do đó, vấn đề này chỉ áp dụng cho các bài kiểm tra đơn vị.
Hỏi: Làm cách nào để thực hiện Kiểm tra đơn vị C# thông thường có thể kích hoạt thành công trình xử lý sự kiện hoạt động?
Có ai đó ở đó phải có mẫu đang hoạt động! Hãy giúp tôi.
Vâng, kiểm tra đơn vị không thành công. Các máy chủ COM có xu hướng cần chương trình để bơm vòng lặp tin nhắn trước khi chúng có thể tạo ra các sự kiện. Nó là một phần của hợp đồng STA. Liên hệ với tác giả thành phần để được hỗ trợ. –
Máy chủ COM là thành phần riêng của chúng tôi - mà chúng tôi muốn kiểm tra. Việc bơm tin nhắn, như bạn nói, là điều cần thiết. Vì vậy, câu hỏi vẫn còn; làm thế nào để bạn thực hiện điều này trong một bài kiểm tra đơn vị? – l33t
@NOPslider Bạn đang sử dụng khung kiểm thử đơn vị nào? Các phiên bản sau của NUnit mặc định cho một mô hình luồng MTA. – vcsjones