Tôi hiện đang viết một khung kiểm tra đơn vị trong các bài kiểm tra đơn vị tiêu chuẩn cuối được viết bằng Visual Studio. Framework hiện không hoạt động chính xác với accessors. Xem xét phương pháp thử sau:Tạo cá thể của lớp truy cập
[TestMethod()]
public void TestMethod()
{
ExampleMethods_Accessor target = null;
target = new ExampleMethods_Accessor();
target.SomeMethod();
}
Trong ví dụ này, trình truy cập đã được tạo bởi Visual Studio. Các bài kiểm tra đơn vị hoạt động hoàn toàn tốt khi chạy bằng cách sử dụng môi trường thử nghiệm đơn vị của Visual Studio. Tuy nhiên, tôi muốn gọi TestMethod() từ bên trong Framework của tôi. Tại dòng "target = new ExampleMethods_Accessor()", ngoại lệ sau đây được ném:
Trình khởi tạo kiểu cho "Proband.ExampleMethods_Accessor" đã ném một ngoại lệ.
ngoại lệ Nội:
Không thể tải tập tin hoặc lắp ráp: Proband, Version = 1.0.0.0, Culture = trung tính, PublicKeyToken = null ...
Có ai có ý tưởng về cách Microsoft Đơn vị kiểm tra Framework gọi thử nghiệm đơn vị? Tôi đã nghĩ rằng nó có thể là do thiếu đối tượng TestContext. Đây là "null" trong trường hợp của tôi. Khi bắt đầu kiểm thử đơn vị trong Visual Studio, đối tượng TestContext chứa rất nhiều thông tin. Nó có thể được, mà tôi cần phải khởi tạo nó đúng cách? Làm thế nào nó sẽ cần phải được khởi tạo?
Cảm ơn tất cả sự giúp đỡ, Christian
EDIT:
tôi vẫn tiếp tục thử nghiệm với các cách accessors đang làm việc. Tôi đã sử dụng ILSpy để xem mã nào đang được tạo ra trong Proband_Accessor.dll. Nó chỉ ra rằng các chỉ dẫn gây ra ngoại lệ là:
SomeClass_Accessor.m_privateType = new PrivateType("Probant, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Probant.SomeClass");
tôi sửa đổi mã kiểm tra đơn vị của tôi là như thế này (chỉ dành riêng cho thử nghiệm):
[TestMethod()]
[DeploymentItem("Proband.dll")]
public void SomeMethodTest()
{
ExampleMethods_Accessor target = null;
ExampleMethods c = null;
try
{
Assembly.Load("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); // this works fine
PrivateType tx = new PrivateType(typeof(ExampleMethods)); // this works fine as well (also without loading the assembly)
PrivateType t = new PrivateType("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Proband.ExampleMethods"); // this causes the exception
c = new ExampleMethods(); // this works fine
target = new ExampleMethods_Accessor(); // this causes the exception as well
}
catch (Exception ex)
{
Console.WriteLine();
}
int actual;
actual = target.SomeMethod();
}
Tôi hoàn toàn không hiểu, tại sao "mới PrivateType ("Proband, phiên bản ...." không hoạt động. có ai có ý tưởng?
'cái Proband' lắp ráp là gì, và làm thế nào bạn đã cố gắng * * để làm cho nó có sẵn? –
chính xác bạn đang viết gì? có vẻ như bạn đang sử dụng khung MSTest, từ việc bạn sử dụng [TestMethod]. Bạn đang viết một số loại thử nghiệm tùy chỉnh _runner_? –
Oh Tôi xin lỗi vì đã không giải thích: Hội đồng ủng hộ là người có chứa mã cần được kiểm tra. ExampleMethods là một lớp bên trong assembly proband, chứa các phương thức riêng ("SomeMethod"). – Christian