2011-12-22 40 views
9

Tôi có một bộ liên kết phức tạp bao gồm nhiều liên kết riêng để giải quyết robot legs problem.Bạn sử dụng kỹ thuật nào để gỡ lỗi các ràng buộc guice phức tạp?

Do khả năng giới hạn của Guice báo cáo lỗi đặt giá thầu dễ hiểu, tôi tự hỏi những công cụ hoặc kỹ thuật hiệu quả, nếu có, ngoài việc đọc ngoại lệ thời gian chạy của Guice có sẵn để khắc phục lỗi liên kết thời gian chạy.

Việc bỏ qua mã cấu hình không hữu ích vì cấu hình xảy ra vào thời gian khởi động thay vì ở thời điểm khởi tạo đối tượng, nơi thường xảy ra lỗi.

Plugin đồ thị Guice có thể sẽ hữu ích nếu nó hoạt động - thử nghiệm của tôi với nó đã dẫn đến biểu đồ không chính xác.

+0

biểu đồ thực sự khá hữu ích. bạn chỉ đơn giản là phải làm việc xung quanh phong cách = invis lỗi – wuppi

+0

bạn có thể gắn thẻ java này, vì vậy chúng tôi nhận được mã màu? – wuppi

Trả lời

6

tôi thấy hai mẹo nhỏ sau đây hữu ích để gỡ lỗi từ this answer:

  • Grapher hình dung kim phun. Nếu nhà cung cấp tùy chỉnh của bạn triển khai HasDependencies, nó có thể làm tăng thêm biểu đồ này.
  • Binder.skipSources() cho phép bạn viết các tiện ích mở rộng có thông báo lỗi theo dõi số dòng đúng cách.

Binder.skipSources() là hữu ích nếu bạn viết phương pháp trợ giúp ràng buộc chung và chỉ Guice báo cáo số dòng của phương pháp trợ giúp chung, nhưng bạn (rất có thể) thực sự muốn số dòng của người gọi lên cấp.

Tôi đang phát triển cho Android, vì vậy thời gian xây dựng có thể khá chậm so với thời gian tôi sửa đổi các ràng buộc của mình cho đến khi tôi thấy kết quả của các thay đổi trên thiết bị hoặc trình mô phỏng. Vì vậy, tôi đã phát triển các bài kiểm tra đơn vị sẽ xác minh các ràng buộc Guice trực tiếp trên máy chủ. Ngay cả khi bạn không phát triển cho Android, nó có thể hữu ích để viết các bài kiểm tra đơn vị ràng buộc Guice như sau. Ngay bây giờ, của tôi trông giống như thế này (ở đây trong Scala - Java sẽ trông giống nhau)

class ProviderTest { 
    var injector : Injector = null 

    @Before 
    def setUp() { 
     injector = Guice.createInjector(
      new BindModule1(), 
      new BindModule2(), 
      new BindGlobals() 
      ) 
    } 

    @After 
    def tearDown() { 
    } 

    @Test def InjectedClass1WasBound() { 
     val provider = injector.getProvider(classOf[InjectedClass1]) 
    } 

    @Test def InjectedClass2WasBound() { 
     val provider = injector.getProvider(classOf[InjectedClass2]) 
    } 
} 

Tôi viết các bài kiểm tra bắt đầu từ lớp được giới hạn sâu nhất. Tức là, nếu C được tiêm vào B, được tiêm vào A, tôi sẽ bắt đầu thử nghiệm tại C. Nếu thử nghiệm đơn vị C của ràng buộc không thành công, tôi sẽ bắt đầu bình luận ra các lĩnh vực tiêm trong C cho đến khi tôi nhận được ràng buộc để thành công. Sau đó, tôi di chuyển theo cách của tôi lên hệ thống phân cấp tiêm lặp lại quá trình này. Tất nhiên nếu bạn theo dõi sự phát triển theo hướng thử nghiệm, và chắc chắn bao gồm các bài kiểm tra ràng buộc Guice-binding trong bộ của bạn, bạn sẽ phát hiện ra các lỗi này ngay sau khi bạn phá vỡ một ràng buộc.

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