第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Java 實(shí)體類及其單元測試的良好實(shí)踐

Java 實(shí)體類及其單元測試的良好實(shí)踐

慕田峪7331174 2023-02-23 18:20:31
我只想確認(rèn)你們是否認(rèn)為這是一個(gè)好習(xí)慣:使用 javax.validation.constraints 注釋用一些驗(yàn)證在 java 中編寫實(shí)體類編寫單元測試以斷言驗(yàn)證編寫單元測試來斷言 getter 和 setter,因?yàn)檫@是一種斷言該類包含我們需要的所有字段的方法@Builder@AllArgsConstructor@NoArgsConstructor@EqualsAndHashCode(callSuper = true)@ToString(exclude = "client")@Data@Entity@Table(name = "addresses")public class Address extends BaseEntity {  private static final long serialVersionUID = -5966581124342250987L;  @NotNull  @Size(min = 2, max = 40)  @Column(name = "line1", nullable = false, length = 40)  private String line1;  @Size(min = 2, max = 40)  @Column(name = "line2", length = 40)  private String line2;  @NotNull  @Size(min = 2, max = 40)  @Column(name = "city", length = 40)  private String city;  @NotNull  @Size(min = 2, max = 2)  @Column(name = "country_code", length = 2)  private String countryCode; //code ISO 3166 two-letter country codes  @NotNull  @EqualsAndHashCode.Exclude  @ManyToOne(fetch = FetchType.LAZY)  @JoinColumn(name = "client_id")  private Client client;}
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

實(shí)體只是沒有邏輯的 POJO 對象。了解您究竟測試了什么是值得的。

如果你想測試實(shí)體驗(yàn)證器,那么放置一些隨機(jī)數(shù)據(jù)而不是預(yù)定義的數(shù)據(jù)是值得的

不但是private static final String ADDRESS_LINE1 = "Address line 1";_

?Address?address?=?Address.builder()
????????????.line1(?randomAddress()?)
????????????.city(?randomCity()?)
????????????.countryCode(?randomCountry()?)
????????????.build()

random*()返回一些有效返回值的預(yù)定義方法在哪里。

如果你想測試Hibernate和mappers,值得考慮一些像H2這樣的嵌入式數(shù)據(jù)庫來做測試。

關(guān)于 getter 和 setter,大多數(shù)時(shí)候它們是自動生成的,這就是為什么我看不到測試它們的意義。


查看完整回答
反對 回復(fù) 2023-02-23
?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

實(shí)體是數(shù)據(jù)庫的增強(qiáng)鏡像(實(shí)例是 SSOT,類是 SVOT),M im MVC,它們是 beans。Bean 是否應(yīng)該進(jìn)行單元測試:否。

你所做的是在實(shí)體中混合 M 和 C。C應(yīng)該進(jìn)行單元測試嗎?Yes!!!.

所以你真的應(yīng)該測試它們!


查看完整回答
反對 回復(fù) 2023-02-23
?
長風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

請注意,實(shí)際上您只測試了所用內(nèi)容的一小部分:例如,所有和無參數(shù)構(gòu)造函數(shù)、setterhashCode()equals()沒有經(jīng)過測試。

現(xiàn)在測試它是一個(gè)好習(xí)慣嗎?我認(rèn)為是的。
使用 Lombok 注釋生成一些實(shí)現(xiàn),您只能在運(yùn)行時(shí)(測試和應(yīng)用程序運(yùn)行時(shí))驗(yàn)證行為。
例如,注釋可能不會產(chǎn)生預(yù)期的行為,因?yàn)榕c另一個(gè)注釋沖突或使用不當(dāng)(例如,如果生成的方法中存在循環(huán),則會出現(xiàn) stackoverflow 錯誤),您可能只會在運(yùn)行時(shí)發(fā)現(xiàn)這些行為,充其量只能清楚地說明異常問題或最壞的情況是根本原因不明顯的潛在錯誤。
同樣,如果有人通過替換它(出于調(diào)試目的)而無意中破壞了實(shí)現(xiàn):

@ToString(exclude = "client")

經(jīng)過 :

@ToString

您希望自動測試檢測到它。
最后,如果您出于任何原因想要刪除項(xiàng)目的 Lombok,您希望進(jìn)行回歸測試,以斷言沒有 Lombok 的新實(shí)現(xiàn)仍然是正確的。
所以是的,使用許多注釋意味著編寫許多斷言/測試。
但在某種程度上這是正常的,因?yàn)榈谌?API 為您的類提供動力并不是一個(gè)細(xì)節(jié)。
請注意,對于 getter/setter,我認(rèn)為測試它們不會帶來很大的價(jià)值,因?yàn)槟軌蛘{(diào)用它們通常意味著它們已由 Lombok 正確實(shí)現(xiàn)。

用這些術(shù)語進(jìn)行推理(統(tǒng)一測試您的類 API 提供的內(nèi)容)有利于生成有用且高質(zhì)量的代碼,因?yàn)槲覀冊谔砑由赡承┐a/邏輯的注釋之前會三思而后行。這是一件好事,因?yàn)槲医?jīng)常看到濫用 Lombok 注釋:“我們不確定是否需要它,但沒問題,因?yàn)樗苋菀茁暶鳌薄?/p>

我將對注釋應(yīng)用完全相同的想法, javax.validation.constraints而對于驗(yàn)證問題,我可能會使用參數(shù)化測試來減少樣板代碼。


查看完整回答
反對 回復(fù) 2023-02-23
  • 3 回答
  • 0 關(guān)注
  • 319 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號