Tôi sử dụng gói tin trong một trong các dịch vụ của tôi trong dự án Grails 2.0 cho văn bản quốc tế. Trường hợp sử dụng là một chủ đề email được gửi qua plugin thư theo cách không đồng bộ, do đó thực sự không có điều này trong bộ điều khiển hoặc TagLib (do đối số thông thường không truy cập vào văn bản hoặc chế độ xem của bạn trong dịch vụ). Mã này hoạt động tốt trong ứng dụng Grails đang chạy của tôi, nhưng tôi không chắc chắn làm thế nào để kiểm tra nó.Cách sử dụng thử nghiệm đơn vị hoặc tích hợp của nguồn tin nhắn được tiêm cho i18n trong dịch vụ Grails 2.0
Tôi đã thử mộtPluginAwareResourceBundleMessageSource
trong defineBeans của tôi vì đó là ứng dụng đang chạy của tôi, nhưng nó dẫn đến nullpointers vì nó xuất hiện cần một bó thiết lập xung quanh trình quản lý plugin và môi trường thử nghiệm của tôi không đưa ra (thậm chí tích hợp) .
Sau đó, tôi đã thử một ReloadableResourceBundleMessageSource
vì nó là Spring thuần túy, nhưng có vẻ như không thấy tệp .properties của tôi và không có thông báo Không tìm thấy mã dưới 'my.email.subject' cho ngôn ngữ 'en'.
Tôi cảm thấy như tôi đang đi xuống một wormhole một chút như truy cập Grails i18n trong một dịch vụ không được tài liệu trong tài liệu grails, vì vậy nếu có một cách ưa thích để làm điều này, cho tôi biết.
Lưu ý tệp .properties của tôi ở vị trí tiêu chuẩn grails-app/i18n
.
Bài kiểm tra
@TestFor(EmailHelperService)
class EmailHelperServiceTests {
void testSubjectsDefaultLocale() {
defineBeans {
//messageSource(PluginAwareResourceBundleMessageSource); Leads to nullpointers
messageSource(ReloadableResourceBundleMessageSource);
}
String expected = "My Expected subject Passed1 Passed2";
String actual = service.getEmailSubjectForStandardMustGiveGiftFromBusiness(Locale.ENGLISH, Passed1 Passed2);
assertEquals("email subject", expected, actual);
}
dịch vụ:
class EmailHelperService {
def messageSource;
public String getEmailSubject(Locale locale, String param1, String param2) {
Object[] params = [param1, param2].toArray();
return messageSource.getMessage("my.email.subject", params, locale);
}
là ý định của bạn để đảm bảo rằng bạn đang có dây lên một cách chính xác với một bài kiểm tra này? Hay bạn đang định viết một cái cho mỗi ngôn ngữ bạn hỗ trợ? Ngoài ra, bài kiểm tra ở trên của bạn là bài kiểm tra Đơn vị hoặc bài kiểm tra Tích hợp? –
ý tưởng là ít hơn để kiểm tra dây lò xo nhưng nhiều hơn để kiểm tra các ngôn ngữ khác nhau khi chúng được hỗ trợ, và để kiểm tra tính chính xác của khóa trong .properties và văn bản. Tôi đơn giản hóa các params cho mục đích dễ đọc nhưng kiểm tra tính chính xác của họ mong muốn. – Peter