powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как тестировать класс создающий все свои сущности сам?
2 сообщений из 2, страница 1 из 1
Как тестировать класс создающий все свои сущности сам?
    #38470442
MaxNevermind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть класс выгляди исходно вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
package my.myapps.model.dao.github;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.egit.github.core.Commit;
import org.eclipse.egit.github.core.Repository;
import org.eclipse.egit.github.core.RepositoryCommit;
import org.eclipse.egit.github.core.service.CommitService;
import org.eclipse.egit.github.core.service.RepositoryService;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import my.myapps.model.dao.GitCommitDao;
import my.myapps.model.entity.GitCommit;

public class CopyOfGitHubCommitDao implements GitCommitDao 
{
	private LocalDate lastGitHubRequest = new LocalDate(1,1,1);
	private List<GitCommit> gitHubCommits = new ArrayList<GitCommit>();
	
	public CopyOfGitHubCommitDao()
	{
	}
	
	@Override
	public List<GitCommit> getAllCommits()
	{
		LocalDate currentDate = new LocalDate();
		if (lastGitHubRequest.isBefore(currentDate)) {
			lastGitHubRequest=currentDate;			
			
			try
			{
				RepositoryService repositoryService = new RepositoryService();
				Repository repo = repositoryService.getRepository("MaxNevermind", "myapps");
				CommitService commitService = new CommitService();
				List<RepositoryCommit> repositoryCommits = commitService.getCommits(repo);
				GitCommit gitHubCommit;
				Commit commit;
				for (RepositoryCommit repositoryCommit : repositoryCommits)
				{
					commit = repositoryCommit.getCommit();
					gitHubCommit=new GitCommit(new DateTime(commit.getCommitter().getDate()), commit.getMessage(),commit.getSha(),commit.getUrl());
					gitHubCommits.add(gitHubCommit);
				}
			} catch (IOException e)
			{
				e.printStackTrace();
			}
			
		}
		return gitHubCommits;
	}
	
}



Мне нужно протестировать что он вызывает commitService.getCommits(repo) только раз в день, то есть заходит в ветку true условия.
Было бы неплохо создать мок CommitService и вызвав getAllCommits потом проверить через verify.
Вопрос, нормальная ли практика в подобном случае переписывать класс как указано ниже, только ради возможности его протестировать?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
package my.myapps.model.dao.github;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.egit.github.core.Commit;
import org.eclipse.egit.github.core.Repository;
import org.eclipse.egit.github.core.RepositoryCommit;
import org.eclipse.egit.github.core.service.CommitService;
import org.eclipse.egit.github.core.service.RepositoryService;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import my.myapps.model.dao.GitCommitDao;
import my.myapps.model.entity.GitCommit;

public class GitHubCommitDao implements GitCommitDao 
{
	private LocalDate lastGitHubRequest = new LocalDate(1,1,1);
	private List<GitCommit> gitHubCommits = new ArrayList<GitCommit>();
	private CommitService commitService;
	
	public GitHubCommitDao()
	{
		this.commitService = new CommitService();
	}
	
	public GitHubCommitDao(CommitService commitService)
	{
		this.commitService = commitService;
	}

	@Override
	public List<GitCommit> getAllCommits()
	{
		LocalDate currentDate = new LocalDate();
		if (lastGitHubRequest.isBefore(currentDate)) {
			lastGitHubRequest=currentDate;			
			
			try
			{
				RepositoryService repositoryService = new RepositoryService();
				Repository repo = repositoryService.getRepository("MaxNevermind", "myapps");
				List<RepositoryCommit> repositoryCommits = commitService.getCommits(repo);
				GitCommit gitHubCommit;
				Commit commit;
				for (RepositoryCommit repositoryCommit : repositoryCommits)
				{
					commit = repositoryCommit.getCommit();
					gitHubCommit=new GitCommit(new DateTime(commit.getCommitter().getDate()), commit.getMessage(),commit.getSha(),commit.getUrl());
					gitHubCommits.add(gitHubCommit);
				}
			} catch (IOException e)
			{
				e.printStackTrace();
			}
			
		}
		return gitHubCommits;
	}
}
...
Рейтинг: 0 / 0
Как тестировать класс создающий все свои сущности сам?
    #38470509
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxNevermind ,
Поменьше запаривайтесь над такими мелочами. Тесты это тесты. Здесь к вам требований значительно меньше. Хотите - вставляйте так, как вы написали. Хотите, инстанцируйте этот сервис и сохраните в поле класс, а потом лезьте в него рефлекшном. Хотите, создайте статический флажок, переключая который тем же рефлекшном ваш класс будет идти либо в нормальный сервис, либо подставлять ваш мок. Хотите - вызывайте сервис два раза, а потом прямо в тесте читайте из Гита, и проверяйте, что закомитилось только 1 раз. Ваще пофиг, это тесты.

Тут такое дело, что с одной стороны тесты не могут и не должны быть определяющим критерием того, как вы пишете тот или иной участок кода. С другой стороны, совсем плевать на тестируемость тоже нельзя. Нужно найти баланс, удовлетворяющий вас. Профессионализм любого инженера заключается не в знании каких-нибудь API, а в умении находить грамотный баланс в таких вот спорных ситуациях.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как тестировать класс создающий все свои сущности сам?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]