2009-09-03 35 views
5

Có thể giả lập lớp Assembly không?Tôi làm cách nào để có thể lắp ráp?

Nếu có, hãy sử dụng khung làm việc nào và cách thực hiện?

Nếu không, làm cách nào để viết bài kiểm tra mã sử dụng Assembly?

+9

Nói với nó là "mẹ của bạn là một con chuột, và cha của bạn có mùi của eldeberries"? – patros

+0

@patros: đã cho tôi một thời gian để hiểu ... –

+0

@Martinho Fernandes: Đã thêm một ví dụ cho Rhino. –

Trả lời

9

TypeMock rất mạnh. Tôi đoán nó có thể làm được. Đối với các khuôn khổ giả khác như Moq hoặc Rhino, bạn sẽ cần phải sử dụng một chiến lược khác.

Chiến lược Rhino hoặc Moq:

mỗi ví dụ: Bạn đang sử dụng Asssembly lớp để có được tên lắp ráp đầy đủ.

public class YourClass 
{ 
    public string GetFullName() 
    { 
     Assembly ass = Assembly.GetExecutingAssembly(); 
     return ass.FullName; 
    } 
} 

Các hội lớp được thừa kế từ giao diện _Assembly. Vì vậy, thay vì sử dụng trực tiếp Lắp ráp trực tiếp, bạn có thể tiêm giao diện. Sau đó, thật dễ dàng để thử giao diện cho thử nghiệm của bạn.

Lớp sửa đổi:

public class YourClass 
{ 
    private _Assembly _assbl; 
    public YourClass(_Assembly assbl) 
    { 
     _assbl = assbl; 
    } 

    public string GetFullName() 
    { 
     return _assbl.FullName; 
    } 
} 

Trong thử nghiệm của bạn, bạn thử _Assembly:

public void TestDoSomething() 
{ 
    var assbl = MockRepository.GenerateStub<_Assembly>(); 

    YourClass yc = new YourClass(assbl); 
    string fullName = yc.GetFullName(); 

    //Test conditions 
} 
+0

. Bạn có thể giải thích làm thế nào tôi sẽ làm điều đó trong một khuôn khổ giả "truyền thống" (như Moq hay tê giác)? –

+1

Ồ, tôi không biết về giao diện '_Assembly' 'ẩn' này. Cảm ơn. Nếu tôi đã làm, tôi sẽ không hỏi câu hỏi. Tôi đoán rằng nếu hội đã không thực hiện giao diện này tôi có thể đã tạo ra một bản thân mình ('IAssembly') và viết một wrapper thực hiện nó và sử dụng' Assembly' thực hiện, đó là chính xác? –

+1

@ Martinho: Đúng là –

Các vấn đề liên quan