My Class以这种方式看待:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/map';
import {Observable} from 'rxjs/Rx';
import { Appointment } from '../models/appointment.model';
import {PersonsService} from './persons.services'
@Injectable()
export class AppointmentService {
private AppointmentUrlGet = 'http://localhost/v0/croissants';
private AppointmentUrlWrite = 'http://localhost/v0/croissant';
public handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
constructor(private http: Http, private personsService: PersonsService) {}
add30mnTo(date : string){
var initialdate = (this.datetotimestamp(date) + 1800) * 1000;
var dateinit = new Date (initialdate)
var result = dateinit.toISOString();
return result;
}
.
.
.
.
}
班级 public class MyClass{
A obj;
List<B> Obj1;
}
public class A{
C obj2;
}
public class B{
List values;
}
中有一个方法addToCart()
,如下所示:
MyClassImpl
我正在为 class MyClassImpl{
addToCart(MyClass c, String x, String Y, String Z);
}
写一个测试类。我能够将x,y和z的测试值传递给MyClassImpl
,但由于c是一个复杂的对象,如何使用值存储此方法?更深层次的设定对我来说是值得的。
答案 0 :(得分:1)
如果您的测试不依赖于MyClass
传递给addToCart()
的已填充实例,那么您可以模拟它...
MyClass myClass = Mockito.mock(MyClass.class);
String x = "some x";
String y = "some y";
String y = "some z";
MyClassImpl sut = new MyClassImpl();
sut.addToCart(myClass, x, y, z);
// continue with test assertions ...
只要您addToCart()
的使用不关心myClass
的内容或行为,此功能就会有效。
但是,如果addToCart()
的测试用量对myClass
的内容或行为有一些期望,那么您必须传递&#39; MyClass&#34;的实际实例。这是为满足这些期望而建造的。或者,正如您的OP建议的那样,&#34;设置更深层次的价值&#34;是耗时的,也许,你的测试只关心MyClass
的某些有限方面,那么你可以使用Mockito来模拟那些有限的方面。例如:
MyClass myClass = Mockito.mock(MyClass.class);
Mockito.when(myClass.getX()).thenReturn("some test specific value");
Mockito.when(myClass.doX()).thenThrow(new RuntimeException("some test specific exception");
String x = "some x";
String y = "some y";
String y = "some z";
MyClassImpl sut = new MyClassImpl();
sut.addToCart(myClass, x, y, z);
// continue with test assertions ...
编辑1 :根据您的评论&#34;在addToCart()&#34;中有一个空格检查Myclass对象myclass和myclass.getX()的条件。 ...
X x = Mockito.mock(X.class);
Mockito.when(myClass.getX()).thenReturn(x);
...将确保MyClass.getX()
内的addToCart()
上的空检查安全通过。当然,传递给myClass
的{{1}}实例的任何空检查都将安全传递,因为您创建了一个模拟的addToCart()
实例并将其传递给MyClass
并且实例,显然,不是空的。