[英]Mockito - Mockito cannot mock this class - IllegalArgumentException: Could not create type
[英]Mock persistance class returns IllegalArgumentException
當我嘗試使用mock(Event.class)
模擬類Event
,我得到了:
java.lang.IllegalArgumentException: Object: Mock for Event, hashCode: 640142691 is not a known entity type.
這是事件類:
@Entity
@Table(name = "event")
@XmlRootElement
public class Event implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Basic(optional = false)
@Column(unique = true, name = "id")
private Integer eventId;
@Basic(optional = false)
@NotNull
@Size(min=1, max=255)
@Column(name = "title")
private String eventTitle;
@Basic(optional = false)
@JoinColumn(name = "created_by", referencedColumnName = "id")
@ManyToOne
private User eventCreatedBy;
@Basic(optional = false)
@Column(name = "created")
@Temporal(TemporalType.TIMESTAMP)
private Date eventCreated;
public Event() {
}
// getters and setters for all database fields
@Override
public int hashCode() {
int hash = 0;
hash += (eventId != null ? eventId.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof Event)) {
return false;
}
Event other = (Event) object;
if ((this.eventId == null && other.eventId != null) || (this.eventId != null && !this.eventId.equals(other.eventId))) {
return false;
}
return true;
}
@Override
public String toString() {
return "Event[ eventId=" + eventId + " ]";
}
這是測試類:
public class EventTest {
private static final Integer EVENT_ID = 1;
private static final String EVENT_TITLE = "title";
private EntityManager em;
private EntityTransaction et;
private EventServiceImpl eventService;
@Before
public void setUp() throws Exception {
em = Persistence.createEntityManagerFactory("test").createEntityManager();
et = em.getTransaction();
eventService = new EventServiceImpl();
eventService.em = em;
Event event = mock(Event.class);
et.begin();
em.persist(event);
}
@After
public void tearDown() throws Exception {
em.close();
}
@Test
public void getList() {
List list = eventService.getList();
Event data = (Event) list.get(0);
assertEquals(1, list.size());
assertEquals(EVENT_TITLE, data.getEventTitle());
}
@Test
public void getById() {
Event data = eventService.get(EVENT_ID);
assertEquals(EVENT_ID, data.getEventId());
}
}
有人知道如何處理嗎?
您正在嘗試保留Event
的模擬,而不是其真實實例。 這是行不通的,因為,就像異常情況一樣,實體管理器無法將模擬的類型識別為實體。
如果要編寫集成測試,則應避免模擬,而應使用真實的類而不是模擬。 嘲笑更常用於使單元測試獨立於其他類。
Event event = new Event(); // Entity manager will recognize this as entity
...
et.begin();
em.persist(event);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.