2015-03-12 21 views
5

Tôi đang phát triển một ứng dụng dựa chủ yếu vào Joda-Money và có một số bài kiểm tra đơn vị xác minh logic kinh doanh của tôi. Một (thừa nhận là nhỏ) gắn bó điểm cho tôi đã được loại Money/BigMoney đối tượng để thử nghiệm với; cụ thể, những gì CurrencyUnit để sử dụng.Loại tiền nào để sử dụng trong các bài kiểm tra đơn vị?

Như tôi đã nhìn thấy nó, tôi có một vài lựa chọn:

  • Chỉ cần sử dụng USD

    Đây rõ ràng là cách dễ nhất để đi, và hầu hết các ứng dụng thực tế của tôi sẽ làm việc với Mỹ Đô la để nó làm cho một chút công bằng của ý nghĩa. Mặt khác, nó cảm thấy khá trung tâm của Mỹ, và tôi lo ngại rằng nó sẽ có nguy cơ cho phép các lỗi cụ thể về tiền tệ không được kiểm soát.

  • Sử dụng khác tiền thật, giống như CAD

    này sẽ bắt sai lầm cứng mã khác của USD, nhưng mặt khác không phải là tốt hơn nhiều so với chỉ sử dụng USD.

  • Sử dụng một chuyên "fake" currency, ví dụ: XTS

    Điều này làm cho rõ nghĩa nào đó, sau khi tất cả, XTS được "dành riêng để sử dụng trong thử nghiệm". Nhưng Joda biểu thị tiền xu psuedo là tiền tệ với -1 số thập phân. Trong thực tế, sự khác biệt chính giữa các loại tiền tệ trong Joda-Money là số chữ số thập phân, do đó, rủi ro này che dấu bất kỳ lỗi nào liên quan đến độ chính xác vị trí thập phân, chẳng hạn như làm tròn sai đến một giá trị số nguyên.

  • đăng ký tiền tệ tùy chỉnh của riêng tôi với CurrencyUnit.registerCurrency()

    Điều này rõ ràng sẽ làm việc, nhưng dường như một chút cái thấy lẻ như có lựa chọn thay thế.

  • Sử dụng một trường hợp CurrencyUnit tạo ra bởi một thư viện mocking

    Khá nhiều giống như việc đăng ký một tệ tùy chỉnh.

Một lần nữa, điều này rõ ràng là một vấn đề nhỏ, nhưng tôi tò mò nếu có một tiêu chuẩn thực hiện đối với trường hợp như thế này, hoặc nếu có một lý do rõ ràng để thích một trong các tùy chọn này nói riêng.

+0

Điều này dường như không hề nhỏ đối với tôi. Bạn sắp lan truyền quyết định này trên tất cả các bài kiểm tra đơn vị của bạn phải không? Nếu bạn không thể đưa ra quyết định này chỉ tồn tại ở một nơi thì bạn sẽ bị mắc kẹt mãi mãi. – CandiedOrange

+0

@CandiedOrange đồng ý, nhưng tôi đã có câu hỏi khác được tắm rửa với "tại sao bạn thậm chí lãng phí thời gian của bạn về điều này?!?!?!?!?!" phản ứng, vì vậy gọi tất cả các mối quan tâm "nhỏ" của tôi là một chút của một cơ chế bảo vệ. – dimo414

+2

Người ghét sẽ ghét. Tiếp tục hỏi, hãy lạc quan và tình yêu sẽ tìm thấy bạn. Hòa bình. – CandiedOrange

Trả lời

2

Sử dụng USD (hoặc, nói chung, bất kỳ đơn vị tiền tệ nào được sử dụng phổ biến nhất trong đơn đăng ký của bạn). Tôi nói điều này vì hai lý do:

  • Dữ liệu thử nghiệm không đáng kể ở mọi khía cạnh ngoại trừ một phần của thử nghiệm thực sự. Khi bạn viết các bài kiểm tra mà không có liên quan gì đến sự khác biệt giữa các loại tiền tệ, bạn không muốn phải suy nghĩ về sự khác biệt giữa các loại tiền tệ. Chỉ cần sử dụng bất cứ điều gì là tự nhiên nhất trong ứng dụng.

  • Ý tưởng sử dụng tiền tệ bất thường ở mọi nơi bằng cách nào đó sẽ dẫn đến việc kiểm tra tốt hơn các loại tiền tệ bất thường là cá trích đỏ. Các thử nghiệm phải rõ ràng và tập trung. Nếu bạn cần phải kiểm tra một cái gì đó về một loại tiền tệ cụ thể, viết một bài kiểm tra có điểm là để kiểm tra điều đó.Và nếu một thử nghiệm không phải là về một loại tiền tệ cụ thể, nó không nên phá vỡ khi xử lý một số khía cạnh khác thường của sự phá vỡ tiền tệ đó - nó không có giá trị để có một nửa thử nghiệm của bạn phá vỡ cho cùng một lý do; bạn chỉ muốn một để phá vỡ. Vì vậy, chỉ cần không cần phải lan truyền tiền tệ bất thường xung quanh bộ thử nghiệm và hy vọng rằng sẽ bắt được một cái gì đó. Thay vào đó, hãy tối ưu hóa để dễ đọc; xem điểm 1.

+1

Cảm ơn, những chiếc nhẫn hợp lý đó đúng với tôi. Nếu tôi viết bất kỳ mã nào rõ ràng là phụ thuộc vào tiền tệ, tôi nên thử nghiệm nó bằng nhiều loại tiền tệ, không dựa vào khuôn khổ thử nghiệm để giới thiệu các trường hợp cạnh tranh cho tôi. – dimo414

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