Как написать контрольный пример для метода, который создает таблицу и добавляет значения - PullRequest
0 голосов
/ 27 декабря 2018

Я настраиваю проект Java, в котором пользователь вводит свои данные и данные будут сохранены в базе данных. Ниже приведен мой код:

public String CreateUserDetails() throws SQLException, JsonProcessingException 
	{
		iterationResourse = new IterationResourse();
		dbcon = DatabaseConnection.getInstance();
		iteratinDetails = IterationDetailsParser.getInstance();

		try {

			String sqlUser = "INSERT INTO user (User_Id,Username,Active_Indi)VALUES(?,?,?)";

			PreparedStatement statement = (PreparedStatement) dbcon.con.prepareStatement(sqlUser);
			statement.setString(1, iterationResourse.ConvertObjectToString(iteratinDetails.getUserId()));
			statement.setString(2, iterationResourse.ConvertObjectToString(iteratinDetails.getUserObj()));
			statement.setBoolean(3, true );
			
			statement.executeUpdate();
			statement.close();
			System.out.println("user created");
			st = "user created";
		} catch (SQLException e) 
		{
			System.out.println("user id alredy exits");
			userIdExits = false;
			ObjectMapper mapperUser = new ObjectMapper();
			JsonNode rootNode = mapperUser.createObjectNode();

			((ObjectNode) rootNode).put("Response", "User ID alreday exits");

			String jsonString = mapperUser.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);
			System.out.println(jsonString);

			iterationResourse.response = jsonString;
			st = "Response\", \"User ID alreday exits";
		}
		
		return st;
	}

Я должен написать контрольный пример для кода выше, я попробовал следующий код.Я пытаюсь смоделировать все объекты, которые я пытаюсь использовать из другого класса, ожидаемый результат должен быть строкой, которая возвращает «Пользователь создан».но я не могу получить ожидаемый результат на основе текущего кода.

public class UserDatabaseTest {


	
	User user = null;
	IterationResourse iterationResourse;
	DatabaseConnection db;
	IterationDetailsParser iterationDetails ;
	
	@Before
	public void setUp()
	{
		 iterationResourse = mock(IterationResourse.class);
		 db = mock(DatabaseConnection.class);
		 iterationDetails = mock(IterationDetailsParser.class);
		user = new User();
		
	}
	
	@Test
	public void test() throws JsonProcessingException, SQLException {
		Object Object = "3";
		String value = "3";
		when(db.getInstance().GetDBConnection()).thenReturn(db.getInstance().GetDBConnection());
	   when(iterationDetails.getUserId()).thenReturn(Object);
	   
	   when(iterationResourse.ConvertObjectToString(Object)).thenReturn(value);
	 
	 assertEquals(user.CreateUserDetails(), "user created");
	}

}

1 Ответ

0 голосов
/ 28 декабря 2018

Здесь нужно написать два случая.

  1. CreateUserDetails возвращает «пользователь создан»
  2. Иначе возвращается «Идентификатор пользователя уже существует» (я исправил две опечатки)

Как указано в комментарияхВы должны действительно абстрагировать свой слой DAO.Но на высоком уровне вы хотите смоделировать DatabaseConnection и вернуть mocks для всего, что он может вернуть.Это предотвращает использование NPE при вызове вашей кодовой базы.

Как только ваши макеты будут на месте, тест должен вернуть "пользователь создан".Для второго теста один из ваших макетов бросит исключение SQLException, и вы можете проверить, что возвращается «Идентификатор пользователя уже существует».Я бы, вероятно, просто передал iteratinDetails в качестве параметра, похоже на зависимость для этого метода.

Наконец, вы не должны проверять, что ваш код создал таблицы базы данных и правильно их заполнил.Пока данные, которые вы передаете (это то, что вы можете протестировать), вы должны верить, что SQL будет выполнять скрипты так, как задумано.Если вы действительно хотели сойти с ума, вы могли бы поиздеваться, чтобы убедиться, что statement подготовлен должным образом.ИМО, это излишне.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...