Вот мое решение в Python для этого:
import requests
import json
def getMovieTitles(substr):
titles = []
data = requests.get("https://jsonmock.hackerrank.com/api/movies/search/?Title={}".format(substr))
response = json.loads(data.content.decode('utf-8'))
for page in range(0, response["total_pages"]):
page_response = requests.get("https://jsonmock.hackerrank.com/api/movies/search/?Title={}&page={}".format(substr, page + 1))
page_content = json.loads(page_response.content.decode('utf-8'))
#print ('page_content', page_content, 'type(page_content)', type(page_content))
for item in range(0, len(page_content["data"])):
titles.append(str(page_content["data"][item]["Title"]))
titles.sort()
return titles
print(getMovieTitles("spiderman"))
TypeMock очень мощный. Я думаю, он справится. Для других макетов фреймворков, таких как Moq или Rhino, вам нужно будет использовать другую стратегию.
Стратегия для Rhino или Moq:
Например: вы используете класс Asssembly , чтобы получить полную сборку имя.
public class YourClass
{
public string GetFullName()
{
Assembly ass = Assembly.GetExecutingAssembly();
return ass.FullName;
}
}
Класс Assembly , производный от интерфейса _Assembly
. Итак, вместо использования Assembly напрямую, вы можете внедрить интерфейс. Затем вы можете имитировать интерфейс для вашего теста.
Модифицированный класс:
public class YourClass
{
private _Assembly _assbl;
public YourClass(_Assembly assbl)
{
_assbl = assbl;
}
public string GetFullName()
{
return _assbl.FullName;
}
}
В вашем тесте вы имитируете _Assembly
:
public void TestDoSomething()
{
var assbl = MockRepository.GenerateStub<_Assembly>();
YourClass yc = new YourClass(assbl);
string fullName = yc.GetFullName();
//Test conditions
}