Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
Ребят второй день бьюсь как рыба об стол не пойму почему так происходит

	public String writeString(String xml){
		Document document;
		try {
			document = loadXMLFromString(xml);
		} catch (Exception e) {
			throw new IllegalArgumentException(e);

		}
		String s =getOldValue(nodeList(document));
		String newS;
		Map<String,String>maps;
		try {
			maps=getValuesFromDb(s);
			if(maps.get("caption").isEmpty()||maps.get("description").isEmpty()){
				newS=xml;
			}else {
				newS = setNewValue(maps, document);}
		} catch (Exception e) {
			throw new IllegalArgumentException(e);
		}
		return newS;
	}



вот этот метод мне нужно замокать я это делаю вот так

CommonImporter commonImporter=mock(CommonImporter.class);
		when(commonImporter.writeString(anyString())).thenReturn("year");


проблема возникает вот тут
maps=getValuesFromDb(s)


вот этот метод
	public   Map<String, String> getValuesFromDb(String code) throws SQLException {
		Map<String, String> map = new HashMap<>();
		Map<String, String> captionDescr = new DictionaryTemplate("doc/dic/custom")
				.setFilter("CODE={0}", code)
				.select(new MapOutcome<String, String>("CAPTION;DESCRIPTION",
						binding -> binding.getString("CAPTION"),
						bindуing -> binding.getString("DESCRIPTION")));
		map.put("caption", captionDescr.keySet().iterator().next());
		map.put("description", captionDescr.values().iterator().next());
		return map;
	}

это некая обертка самописная над jdbc - выполняющая селекты

при запуске теста я получаю NPE

Caused by: java.lang.NullPointerException
	at com.custsystems.db.dbcon.DbConnector.getDbConfig(DbConnector.java:53)
	at com.custsystems.custerp.kernel.Context.getConnectionContext(Context.java:152)
	at com.custsystems.custerp.kernel.Context.getConnection(Context.java:157)
	at com.custsystems.custsql.query.SqlDao.getConnection(SqlDao.java:226)
	at com.custsystems.custsql.query.SqlDao.fetch(SqlDao.java:94)
	at com.custsystems.custsql.query.SqlQuery.fetch(SqlQuery.java:111)

я понимаю что по каким то причинам идет вызов метода getValuesFromDb-и конечно ничего не происходит,так как в тестах бд отсуствует да и не нужно мне ее тестировать

но это лирика почему мокая метод и явно указывая что нужно отдать при его вызове все равно идет вызов метода реального ?

Сообщение было отредактировано: 31 июл 20, 09:32
31 июл 20, 09:34    [22175942]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
Опять ведь сам решишь задачку).
Дай ссыль на твое мокание только из букваря или инета.
"когда обучаются - делают с книжкой в обнимку" (с)

Сообщение было отредактировано: 31 июл 20, 10:14
31 июл 20, 10:17    [22175965]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,
Опять ведь сам решишь задачку).
Дай ссыль на твое мокание только из букваря или инета.
"когда обучаются - делают с книжкой в обнимку" (с)

https://habr.com/ru/post/444982/
31 июл 20, 10:23    [22175970]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
Не тут врядли решу- я не пойму почему мокнутый класс и явное указание что должен делать метод,а флоу все равно идет по реальному методу и лезет в базу зачем то,которой нет
31 июл 20, 10:24    [22175972]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,

Теперь выкинь все из метода про бд и поставь одну строку райзе или log(....
Не надо тут ЛИШНЕЙ информации.
Сделай пример как в хабре. РАБОЧИЙ.
31 июл 20, 10:49    [22175984]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,

Теперь выкинь все из метода про бд и поставь одну строку райзе или log(....
Не надо тут ЛИШНЕЙ информации.
Сделай пример как в хабре. РАБОЧИЙ.

где именно ты предлагаешь выкинуть и что укажи на участок кода
31 июл 20, 11:05    [22175993]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
Вот внутри метода нас интересует?
public Map<String, String> getValuesFromDb(String code) throws SQLException {
Map<String, String> map = new HashMap<>();
Map<String, String> captionDescr = new DictionaryTemplate("doc/dic/custom")
.setFilter("CODE={0}", code)
.select(new MapOutcome<String, String>("CAPTION;DESCRIPTION",
binding -> binding.getString("CAPTION"),
bindуing -> binding.getString("DESCRIPTION")));
map.put("caption", captionDescr.keySet().iterator().next());
map.put("description", captionDescr.values().iterator().next());
return map;
}
...
И сделай рабочий пример из книжки.
А пртом уже свой.
31 июл 20, 11:18    [22175999]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
У тебя весь вопрос заключается:
- как мокнуть методХХХ()
А ты вывалил кучу не того кода что нужно.
31 июл 20, 11:21    [22176002]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,
Вот внутри метода нас интересует?
public Map<String, String> getValuesFromDb(String code) throws SQLException {
Map<String, String> map = new HashMap<>();
Map<String, String> captionDescr = new DictionaryTemplate("doc/dic/custom")
.setFilter("CODE={0}", code)
.select(new MapOutcome<String, String>("CAPTION;DESCRIPTION",
binding -> binding.getString("CAPTION"),
bindуing -> binding.getString("DESCRIPTION")));
map.put("caption", captionDescr.keySet().iterator().next());
map.put("description", captionDescr.values().iterator().next());
return map;
}
...
И сделай рабочий пример из книжки.
А пртом уже свой.

а зачем мне этот метод выше? я его не тестирую
я мокаю совершено другой метод,но почему то флоу все равно идет сюда

если убираю заход в базу тест конечно же работает нормально
31 июл 20, 11:22    [22176003]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
Тебе не нужен, а нам?
Эксбеционист?
)))
31 июл 20, 11:23    [22176005]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,
Тебе не нужен, а нам?
Эксбеционист?
)))

ты тему прочти с начала - этот код приведен как пример куда идет флоу почему то

хотя метод его вызываюзий мокнут и ему задано определенное поведение
31 июл 20, 11:34    [22176010]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1491
Так мокай сразу всю бд. Сделай там себе какой-нибудь sqlite с тестовыми данными, зачем эти костыли?
31 июл 20, 11:34    [22176011]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1491
Zzz79,

Ну и у тебя обычная процедурщина вместо ооп. getValuesFromDb должен быть методом какого-то левого класса, который ты цепляешь через @Autowired в свой код. При тесте будет цепляться тестовый манагер, который будет загнан в конфиг тестового окружения. Как-то так.

Сообщение было отредактировано: 31 июл 20, 11:34
31 июл 20, 11:37    [22176014]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79
PetroNotC Sharp
Zzz79,
Тебе не нужен, а нам?
Эксбеционист?
)))

ты тему прочти с начала - этот код приведен как пример куда идет флоу почему то

хотя метод его вызываюзий мокнут и ему задано определенное поведение
ну, тебе же поговорить как всегла надо. Стек показать.
Обсудить 130 страниц.
Мы мокаем метод и нам не интересен код внутри.
Логично?
31 июл 20, 11:42    [22176016]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
crutchmaster,
Да. У него процедурщина.
И метод writeString делает все подряд. И запрашивает бд, и... Косит и жнет.
31 июл 20, 11:45    [22176017]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
crutchmaster
Zzz79,

Ну и у тебя обычная процедурщина вместо ооп. getValuesFromDb должен быть методом какого-то левого класса, который ты цепляешь через @Autowired в свой код. При тесте будет цепляться тестовый манагер, который будет загнан в конфиг тестового окружения. Как-то так.

а по другому никак?

почему мокнутый метод все равно дергает методы внутри себя из реального кода?

как сделать так чтобы commonImporter.writeString(String xml) отдавал что ему прописано в моке

CommonImporter commonImporter=mock(CommonImporter.class);
		when(commonImporter.writeString(anyString())).thenReturn("year");


не заходя в свою нутрянку вот чего я не пойму - с какого перепуга он лезет в нутро метода ,вместо того чтобы просто отдать String "year"
31 июл 20, 11:55    [22176022]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
crutchmaster,
Да. У него процедурщина.
И метод writeString делает все подряд. И запрашивает бд, и... Косит и жнет.


интересно а есть другие варианты? там же вызов другого метода идет а как по другому то?
31 июл 20, 11:57    [22176024]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp

Мы мокаем метод и нам не интересен код внутри.
Логично?

вот именно ,но почему то происходит так что мокнутый метод лезет в свою реальную нутрянку.
Почему ? хз
31 июл 20, 12:00    [22176025]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79
PetroNotC Sharp
crutchmaster,
Да. У него процедурщина.
И метод writeString делает все подряд. И запрашивает бд, и... Косит и жнет.


интересно а есть другие варианты? там же вызов другого метода идет а как по другому то?
верхний метод зовут по имени БЛ.
А внутри 3 метода написанные выше.
БЛ разве "записатьСтроку? Имя класса какое?
31 июл 20, 12:01    [22176026]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79
PetroNotC Sharp

Мы мокаем метод и нам не интересен код внутри.
Логично?

вот именно ,но почему то происходит так что мокнутый метод лезет в свою реальную нутрянку.
Почему ? хз
забалтываешь мою просьбу - вместо внутренностей вставить райзе и проверить.
31 июл 20, 12:04    [22176031]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79
пропущено...


интересно а есть другие варианты? там же вызов другого метода идет а как по другому то?
верхний метод зовут по имени БЛ.
А внутри 3 метода написанные выше.
БЛ разве "записатьСтроку? Имя класса какое?

верхний метод записать строку
имя класса CommonImport
31 июл 20, 12:09    [22176037]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
забыл ник
Member

Откуда:
Сообщений: 3367
CommonImporter commonImporter=mock(CommonImporter.class);
		when(commonImporter.writeString(anyString())).thenReturn("year");

Ну и как ты потом вызываешь метод? Ты сохраняешь вообще ссылку?
Варианта собственно два - либо ты вызываешь код на немокнутом интерфейсе, либо вызывается не тот метод(допустим с другими параметрами)
ПЫСЫ - потому я и говорю что моки это говнище
31 июл 20, 12:11    [22176041]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
SpringMan
Member

Откуда:
Сообщений: 205
Покажи свой тест целиком
31 июл 20, 12:12    [22176042]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
Короче, я бы просто в имя метода добавил работу с бд.
Так как это важно почти всегда. Типо:
Импорт.выполнить()
или
Импорт.модифицироватьХMLизБД()
Как то так.
Внутри работа с бд отдельным классом.

Сообщение было отредактировано: 31 июл 20, 12:12
31 июл 20, 12:14    [22176044]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
SpringMan
Покажи свой тест целиком

тестируемый класс
package com.custsystems.dictionary.docMaker.template.load.imports;

import com.custsystems.custerp.dictionary.IDictionary;
import com.custsystems.custerp.dictionary.dictionaryStorage.IDataItemModel;
import com.custsystems.custerp.kernel.Context;
import com.custsystems.custtools.log.Logger;
import com.custsystems.dictionary.docMaker.template.load.export.Field;
import com.custsystems.dictionary.docMaker.template.load.export.FieldsGroup;
import com.custsystems.dictionary.docMaker.template.load.export.Template;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Importer {

	private static final Logger logger = Logger.getLogger(Importer.class);

	IDictionary dic;

	public Importer() {
		this(Context.newDictionary("doc_maker/doc/isimple_template"));

	}

	public Importer(IDictionary dic) {
		this.dic = dic;
	}

	/**
	 * Метод для загрузки шаблона
	 *
	 * @param data данные для загрузки
	 * @return список IDataItemModel
	 */
	public List<IDataItemModel> load(byte[] data) {
		List<IDataItemModel> result = new ArrayList<>();
		for (Template template : toTemplate(data)) {
			result.add(createItem(template));
		}
		return result;
	}

	/**
	 * Метод для сохраннеия шаблона в справочнике
	 */
	public void save() {
		dic.post();
	}

	private Template[] toTemplate(byte[] fileData) {

		Template[] templates = new Template[0];
		try {
			templates = new ObjectMapper().readValue(fileData, Template[].class);
		} catch (IOException e) {
			logger.error(e);
			throw new IllegalArgumentException(e);

		}
		return templates;
	}

	private IDataItemModel createItem(Template item) {
		CommonImporter commonImporter=new CommonImporter();
					IDataItemModel record = dic.getNewDataRecord();
					record.set("GROUP", item.getGroup());
					record.set("ORDER", item.getOrder());
					record.set("DOC_VERSION", item.getDocVersion());
					record.set("DOC_KIND", item.getDocKind());
					record.set("DOC_OWNER_TYPE", item.getDocOwnerType());
					record.set("DOC_TITLE", item.getDocTitle());
					record.set("ROLES", item.getRoles());
					record.set("DOC_INFO", item.getDocInfo());
					record.set("SEND_DOC", item.isSendDoc());
					record.set("SEND_TYPE", item.getSendType());
					record.set("SEND_SP_NAME", item.getSendSpName());
					record.set("SEND_SP_FIELDS", item.getSendSpFields());
					record.set("CHECK_DOC", item.isCheckDoc());
					record.set("CHECK_TYPE", item.getCheckType());
					record.set("CHECK_SP_NAME", item.getCheckSpName());
					record.set("CHECK_SP_FIELDS", item.getCheckSpFields());
					record.set("CANCEL_DOC", item.isCancelDoc());
					record.set("CANCEL_TYPE", item.getCancelType());
					record.set("CANCEL_SP_NAME", item.getCancelSpName());
					record.set("CANCEL_SP_FIELDS", item.getCancelSpFields());
					record.set("IS_CONFIRM", item.isConfirm());
					IDictionary fieldGroups = (IDictionary) record.get("FIELD_GROUP");
					for (FieldsGroup group : item.getFieldGroup()) {
						IDataItemModel newGroup = fieldGroups.getNewDataRecord();
						newGroup.set("ORDER", group.getOrder());
						newGroup.set("NAME", group.getName());
						newGroup.set("NAME_ID", group.getNameId());
						newGroup.set("DESCRIPTION", group.getDescription());
						newGroup.set("COUNT", group.getCount());

						IDictionary fields = (IDictionary) newGroup.get("FIELDS");
						for (Field field : group.getFields()) {
							IDataItemModel newField = fields.getNewDataRecord();
							newField.set("GROUP_CODE", field.getGroupCode());
							newField.set("FIELD_ORDER", field.getOrder());
							newField.set("FIELD_NAME", field.getName());
							newField.set("FIELD_NAME_ID", field.getNameId());
							newField.set("DESCRIPTION", field.getDescription());
							newField.set("TOOLTIP", field.getTooltip());
							newField.set("FIELD_TYPE", field.getType());

							String xml=field.getTypeProperties();
							newField.set("FIELD_TYPE_PROPERTIES", commonImporter.writeString(xml));
							newField.set("FIELD_MANDATORY", field.isMandatory());
							newField.set("FIELD_MANDATORY_EXPRESSION", field.getMandatoryExpression());
							newField.set("FIELD_VISIBLE", field.isVisible());
							newField.set("FIELD_VISIBLE_EXPRESSION", field.getVisibleExpression());
							newField.set("FIELD_READONLY", field.isReadonly());
							newField.set("FIELD_READONLY_EXPRESSION", field.getReadonlyExpression());
							newField.set("COMPONENT_WIDTH", field.getComponentWidth());
							newField.set("DEFAULT_VALUE", field.getDefaultValue());
						}
					} return  record;
				}

}



вспомогоательный класс
package com.custsystems.dictionary.docMaker.template.load.imports;

import com.custsystems.custerp.dictionary.selectDictionary.template.DictionaryTemplate;
import com.custsystems.custerp.dictionary.selectDictionary.template.MapOutcome;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringReader;
import java.io.StringWriter;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

public class CommonImporter {

	public  Document loadXMLFromString(String xml) throws Exception{
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		DocumentBuilder builder =factory.newDocumentBuilder();
		InputSource is=new InputSource(new StringReader(xml));
		return builder.parse(is);
	}

	public  String getOldValue(NodeList list) {
		for (int i = 0; i < list.getLength(); i++) {
			Node node = list.item(i);
			if (node.getAttributes().getNamedItem("NAME").getTextContent().equalsIgnoreCase("CUST_DIC_ITEM_CODE")) {
				return node.getAttributes().getNamedItem("VALUE").getTextContent();
			}
		}return "";
	}

	public  String setNewValue(Map<String,String> map, Document document) throws TransformerException {
		NodeList list= nodeList(document);
		for (int i = 0; i < list.getLength(); i++) {
			Node node = list.item(i);
			if (node.getAttributes().getNamedItem("NAME").getTextContent().equalsIgnoreCase("CUST_DIC_CAPTION")) {
				node.getAttributes().getNamedItem("VALUE").setTextContent(map.get("caption"));
			}
			if (node.getAttributes().getNamedItem("NAME").getTextContent().equalsIgnoreCase("CUST_DIC_ITEM_CAPTION")) {
				node.getAttributes().getNamedItem("VALUE").setTextContent(map.get("caption"));
			}
			if (node.getAttributes().getNamedItem("NAME").getTextContent().equalsIgnoreCase("CUST_DIC_ITEM_DESCRIPTION")) {
				node.getAttributes().getNamedItem("VALUE").setTextContent(map.get("description"));
			}
		}
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer trans = tf.newTransformer();
		StringWriter sw = new StringWriter();
		trans.transform(new DOMSource(document), new StreamResult(sw));
		return sw.toString();
	}

	public  NodeList nodeList(Document document){
		return document.getDocumentElement().getChildNodes();
	}

	public   Map<String, String> getValuesFromDb(String code) throws SQLException {
		Map<String, String> map = new HashMap<>();
		Map<String, String> captionDescr = new DictionaryTemplate("doc/dic/custom")
				.setFilter("CODE={0}", code)
				.select(new MapOutcome<String, String>("CAPTION;DESCRIPTION",
						binding -> binding.getString("CAPTION"),
						binding -> binding.getString("DESCRIPTION")));
		map.put("caption", captionDescr.keySet().iterator().next());
		map.put("description", captionDescr.values().iterator().next());
		return map;
	}

	public String writeString(String xml){
		Document document;
		try {
			document = loadXMLFromString(xml);
		} catch (Exception e) {
			throw new IllegalArgumentException(e);

		}
		String s =getOldValue(nodeList(document));
		String newS;
		Map<String,String>maps;
		try {
			maps=getValuesFromDb(s);
			if(maps.get("caption").isEmpty()||maps.get("description").isEmpty()){
				newS=xml;
			}else {
				newS = setNewValue(maps, document);}
		} catch (Exception e) {
			throw new IllegalArgumentException(e);
		}
		return newS;
	}
}


сам тест
package com.custsystems.dictionary.docMaker.template.load.imports;

import com.custsystems.custerp.dictionary.IDictionary;
import com.custsystems.custerp.dictionary.dictionaryStorage.IDataItemModel;
import com.custsystems.dictionary.docMaker.template.load.export.Field;
import com.custsystems.test.TestDataItemModel;
import org.apache.commons.io.IOUtils;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class ImporterTest {

	@Test
	public void successCreateOneItem() throws Exception {
		byte[] bytes = IOUtils.toByteArray(getClass().getResourceAsStream("template.json"));

		TestDataItemModel record = new TestDataItemModel();
		IDictionary dic = mock(IDictionary.class);
		when(dic.getNewDataRecord()).thenReturn(record);
		IDictionary fieldGroups=mock(IDictionary.class);
		TestDataItemModel newGroup=new TestDataItemModel();
		record.set("FIELD_GROUP",fieldGroups);
		when(fieldGroups.getNewDataRecord()).thenReturn(newGroup);
		IDictionary fields=mock(IDictionary.class);
		TestDataItemModel newField =new TestDataItemModel();
		newGroup.set("FIELDS",fields);
		when(fields.getNewDataRecord()).thenReturn(newField);


		Field field=mock(Field.class);
		when(field.getTypeProperties()).thenReturn("jkkjh");
		CommonImporter commonImporter=mock(CommonImporter.class);
		Map<String,String>map=new HashMap<>();
		map.put("S","b");
		map.put("d","e");
		when(commonImporter.getValuesFromDb(anyString())).thenReturn(map);
		when(commonImporter.writeString(anyString())).thenReturn("year");

		List<IDataItemModel> items = new Importer(dic).load(bytes);

		assertEquals(1, items.size());


	}
}
31 июл 20, 12:26    [22176063]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
забыл ник
Member

Откуда:
Сообщений: 3367
private IDataItemModel createItem(Template item) {
		CommonImporter commonImporter=new CommonImporter();


Ясно-понятно
31 июл 20, 12:34    [22176078]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,
Короче, я бы просто в имя метода добавил работу с бд.
Так как это важно почти всегда. Типо:
Импорт.выполнить()
или
Импорт.модифицироватьХMLизБД()
Как то так.
Внутри работа с бд отдельным классом.

у меня все так и есть,я не пойму с какого перепуга не работает правильно мок
31 июл 20, 12:35    [22176081]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
забыл ник
private IDataItemModel createItem(Template item) {
		CommonImporter commonImporter=new CommonImporter();


Ясно-понятно

что именно?
31 июл 20, 12:38    [22176087]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,

>у меня все так и есть,я не пойму с какого перепуга не работает правильно мок
Сделать работающий пример как на хабре.
Особенно если в первый раз.
31 июл 20, 12:41    [22176091]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,

>у меня все так и есть,я не пойму с какого перепуга не работает правильно мок
Сделать работающий пример как на хабре.
Особенно если в первый раз.

мок работает ,если закоментить строчку в тестируемом классе ,где происходит манипуляция с данными
31 июл 20, 12:44    [22176095]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1491
PetroNotC Sharp
И метод writeString делает все подряд. И запрашивает бд, и... Косит и жнет.

Я пропустил тред, где Стас утверждал, что солид не нужен или это кто-то другой был?
31 июл 20, 12:44    [22176096]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
crutchmaster
PetroNotC Sharp
И метод writeString делает все подряд. И запрашивает бд, и... Косит и жнет.

Я пропустил тред, где Стас утверждал, что солид не нужен или это кто-то другой был?


давай щас это опустим- мне нужно понять почему метод который замокан-не отдает то что прописано в thenReturn
а начинает выполнять флоу реального проекта
31 июл 20, 12:48    [22176098]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
crutchmaster,
Я докопался чисто до названий методов. Невозможно тестировать метод, не понимая что он делает по БЛ.
31 июл 20, 12:52    [22176107]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
> мок работает ,если закоментить строчку в тестируемом классе ,где происходит манипуляция с данными
Я и предлагаю, упростить код и вопрос. Выкинуть лишнее. Написать ТЕБЕ демку.
31 июл 20, 12:53    [22176109]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
забыл ник
Member

Откуда:
Сообщений: 3367
Zzz79
забыл ник
private IDataItemModel createItem(Template item) {
		CommonImporter commonImporter=new CommonImporter();


Ясно-понятно

что именно?

Каким образом ты думаешь твой мок подхватится?
31 июл 20, 12:54    [22176110]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
забыл ник
Zzz79
пропущено...

что именно?

Каким образом ты думаешь твой мок подхватится?

пойдет по тестируемому методу
увидит вывов commonImport.writeString(xml)

увидит что в тесте написано
CommonImporter commonImporter=mock(CommonImporter.class);
when(commonImporter.writeString(anyString())).thenReturn("year")

и вернет заглушку

разве не так?
31 июл 20, 13:00    [22176116]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
забыл ник
Member

Откуда:
Сообщений: 3367
Zzz79
забыл ник
пропущено...

Каким образом ты думаешь твой мок подхватится?

пойдет по тестируемому методу
увидит вывов commonImport.writeString(xml)

увидит что в тесте написано
CommonImporter commonImporter=mock(CommonImporter.class);
when(commonImporter.writeString(anyString())).thenReturn("year")

и вернет заглушку

разве не так?

Еще раз. Какой инстанс ты мокаешь, и на каком вызывается реальный код?
31 июл 20, 13:03    [22176120]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1491
Zzz79
а начинает выполнять флоу реального проекта

Открой сорцы этого мокера, да посмотри, что он делает. Делов-то. Картинка с другого сайта.
Чего вообще ты ожидал? Хотел прихерачить либу с рефлексивой чёрной магией и надеелся что всё легко и просто будет работать как тебе надо? Тут так не бывает. А вот просрать две недели в поисках проблемы - очень даже, особенно, если ничего не знаешь.

Сообщение было отредактировано: 31 июл 20, 13:06
31 июл 20, 13:09    [22176125]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
забыл ник
Zzz79
пропущено...

пойдет по тестируемому методу
увидит вывов commonImport.writeString(xml)

увидит что в тесте написано
CommonImporter commonImporter=mock(CommonImporter.class);
when(commonImporter.writeString(anyString())).thenReturn("year")

и вернет заглушку

разве не так?

Еще раз. Какой инстанс ты мокаешь, и на каком вызывается реальный код?

кажется я понял на что ты намекаешь)
я вызывают код в тесте вот так
List<IDataItemModel> items = new Importer(dic).load(bytes);

соответсеноо у меня мокнут dic

надо добавтить в конструктор класса Importer класс commonImporter и в тесте закинуть туда мок)

щас опробуем)
31 июл 20, 13:22    [22176134]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
Вот я тупой то)) блин
31 июл 20, 13:30    [22176138]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
забыл ник


Еще раз. Какой инстанс ты мокаешь, и на каком вызывается реальный код?

Спасиб реально помог)
заработало)
у меня еще один вопрос есть тоже по юнит тесту

	byte[] toBytes(List<TemplateGroup> list) throws JsonProcessingException {
		ObjectMapper mapper = new ObjectMapper();
		mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
		return mapper.writeValueAsBytes(list);
	}


мне нужно протестировать вот этот метод

тоесть у меня есть джейсон - я долджен его положить в байт массив и сравнить с тем что выдаст вот этот метод
тут есть первая проблема- насколько я знаю байт массивы сравнить нельзя ни по ссылке ни по equals ,всегда будет false,хотя содержимое одинаково=но это можно решить проверкой выборочных элементов массива
но самое главное что я не могу никак получить такой же байт массив из джейсона ,да что там из джейсона я даже такой же байт массив не могу получить делая вот такие манипуляции
	TemplateGroup templateGroup = TemplateGroup.builder()
				.groupCode("2")
				.groupName("sss")
				.groupDescription("sds")
				.groupOrder(3)
				.build();
		ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
		ObjectOutputStream objectOutputStream=new ObjectOutputStream(byteArrayOutputStream);
		objectOutputStream.writeObject(Collections.singleton(templateGroup));
		byte[] bytes=byteArrayOutputStream.toByteArray();

		Exporter exporter=new Exporter();
		 byte[] result =exporter.toBytes(Collections.singletonList(templateGroup));
		assertEquals(bytes.length,result.length);
		assertEquals(bytes[5],result[5]);
		assertEquals(bytes[10],result[10]);
		assertEquals(bytes[20],result[20]);
		assertEquals(bytes[30],result[30]);

	}

хотя передаю один и тот же объект и
mapper.writeValueAsBytes(list)
эквивалентно byteArrayOutStream.toByteArray
31 июл 20, 13:39    [22176142]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
SpringMan
Member

Откуда:
Сообщений: 205
1) В junit-е есть assertArrayEquals
2) Ты не веришь jackson-у? Он по идее всегда выдает один и тот же массив байт, проверь исходящие кодировки и одинаково ли сконфигурированы ли ObjectMapper-ы

Сообщение было отредактировано: 31 июл 20, 13:45
31 июл 20, 13:48    [22176147]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
SpringMan
1) В junit-е есть assertArrayEquals
2) Ты не веришь jackson-у? Он по идее всегда выдает один и тот же массив байт, проверь исходящие кодировки и одинаково ли сконфигурированы ли ObjectMapper-ы

спасибо попробую

у меня вопрос такой если я беру джейсон и беру объект поля там одинаковы- то если привести это в байт массивам они же должны быть идентичны?
но почему то не получается идентичност
31 июл 20, 13:55    [22176157]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
SpringMan
Member

Откуда:
Сообщений: 205
Это зависит от кодировки, последовательности полей, индивидуальные особенности сериализаторов и т.п. Посмтри эти массивы как на строки, сравни кодировки и найдешь в чем отличия

Сообщение было отредактировано: 31 июл 20, 13:57
31 июл 20, 14:00    [22176160]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,

Ты прикладной код пишешь? Тогда зачем сравнивать байты?
31 июл 20, 14:17    [22176178]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
>тоесть у меня есть джейсон - я долджен его положить в байт массив и сравнить с тем что выдаст вот этот метод
=
Есть волга и тойота. Я должен разобрать их на винтики и сравнить между собой.
Так?
31 июл 20, 14:21    [22176182]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,
>тоесть у меня есть джейсон - я долджен его положить в байт массив и сравнить с тем что выдаст вот этот метод
=
Есть волга и тойота. Я должен разобрать их на винтики и сравнить между собой.
Так?

типо того,только и волга и тойота в моем случае тойота ,только разобраны разными методами)
31 июл 20, 14:29    [22176195]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,

Угу. Отсюда вопрос, что тестируем? И нафига разбирать на байты?
Хибер решает тойота или волга тупо по id записи в бд.
31 июл 20, 14:32    [22176199]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,

Я сомневаюсь что БЛ у тебя "Разные методи разборки машин"
))))
31 июл 20, 14:33    [22176201]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,

Угу. Отсюда вопрос, что тестируем? И нафига разбирать на байты?
Хибер решает тойота или волга тупо по id записи в бд.

я же те показал что тестируем)

метод выше
31 июл 20, 15:00    [22176234]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
забыл ник
Member

Откуда:
Сообщений: 3367
Zzz79
PetroNotC Sharp
Zzz79,

Угу. Отсюда вопрос, что тестируем? И нафига разбирать на байты?
Хибер решает тойота или волга тупо по id записи в бд.

я же те показал что тестируем)

метод выше

А должен тестировать бизнес-логику а не метод
31 июл 20, 15:11    [22176250]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
забыл ник
Zzz79
пропущено...

я же те показал что тестируем)

метод выше

А должен тестировать бизнес-логику а не метод

дак ее там нет)
сказали проверить что джейсон и то что заходит на запись одинаковы- но не получается почему то опять

вот сам метод который надо оттестить

byte[] toBytes(List<TemplateGroup> list) throws JsonProcessingException {
		ObjectMapper mapper = new ObjectMapper();
		mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
		return mapper.writeValueAsBytes(list);
	}


вот тест

public class ExporterTest {

	@Test
	public void successWriteJson() throws IOException {
		byte[] bytes = IOUtils.toByteArray(getClass().getResourceAsStream("template_group.json"));
		TemplateGroup templateGroup = TemplateGroup.builder()
				.groupCode("2")
				.groupName("sss")
				.groupDescription("sds")
				.groupOrder(3)
				.build();


		Exporter exporter=new Exporter();
		 byte[] result =exporter.toBytes(Collections.singletonList(templateGroup));
		assertEquals(bytes.length,result.length);


	}



вот джейсон ,который считывается для теста

[
  {
	"groupCode": "2",
	"groupName": "sss",
	"groupDescription": "sds",
	"groupOrder": 3
  }
]



вот результат

java.lang.AssertionError: 
Expected :103
Actual   :77


я не пойму по разному чтоли как то это все конвертится в байты?
вроде под капотом то одно и тоже
31 июл 20, 15:21    [22176259]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79
PetroNotC Sharp
Zzz79,

Угу. Отсюда вопрос, что тестируем? И нафига разбирать на байты?
Хибер решает тойота или волга тупо по id записи в бд.

я же те показал что тестируем)

метод выше
для извратов отдельная тема.
Это я тут не один такого мнения)))
31 июл 20, 15:23    [22176261]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79
пропущено...

я же те показал что тестируем)

метод выше
для извратов отдельная тема.
Это я тут не один такого мнения)))

я сам не знаю зачем эти тесты пишу)но раз сказали надо писать,но и все равно же интересно почему по сути одно и тоже при сериализации становится разными массивами с байтами
31 июл 20, 15:35    [22176271]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
Как вариант, если пописать против ветра, то добавится пробел. Если по ветру то json бещ пробела.
Но валидный.
31 июл 20, 15:42    [22176275]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
похоже надо сначала из джейсона собрать обьъкт затем его в байты и только потом сравнивать- видимо там какие то хедеры попадают лишние при сериализации
31 июл 20, 15:43    [22176276]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,
Как вариант, если пописать против ветра, то добавится пробел. Если по ветру то json бещ пробела.
Но валидный.

поигрался с пробелами - не играет роли ,тот же самый байт массив приходит

в кодировке чтоли дело хз
31 июл 20, 15:45    [22176280]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
Тестируют циклические штуки
Строка (“Мир“) - - > байты - - >Строка (“Мир“)
31 июл 20, 15:46    [22176281]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79
PetroNotC Sharp
Zzz79,
Как вариант, если пописать против ветра, то добавится пробел. Если по ветру то json бещ пробела.
Но валидный.

поигрался с пробелами - не играет роли ,тот же самый байт массив приходит

в кодировке чтоли дело хз
не беги. Выхи впереди.
31 июл 20, 15:47    [22176282]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79
пропущено...

поигрался с пробелами - не играет роли ,тот же самый байт массив приходит

в кодировке чтоли дело хз
не беги. Выхи впереди.

в том и дело,лид уже пишет ну чо ты там сделал ?)
31 июл 20, 15:56    [22176289]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,

Ни и покажи лиду что сделано. Или ты его по привычке обозвал всяко))?
А по методу, где он у тебя в коде?
Скажи можешь тест записи бд проверить методом "обратно прочли после коммита."
31 июл 20, 16:44    [22176315]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
сделал)))

оказывается как ты и сказал дело было в пробелах
пробелы в джейсоне убрал- тест позеленел
31 июл 20, 16:54    [22176323]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79,
Нет уж подробнее.
Кто ставил пробелы так виртуозно и мастерски?
31 июл 20, 17:00    [22176332]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1491
Zzz79
сделал)))


Зачем херню сделал? Когда тест обратно покраснеет, как кто будет искать ошибку? Выдаст он у тебя fail, а что fail?
1 авг 20, 05:43    [22176466]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
PetroNotC Sharp
Zzz79,
Нет уж подробнее.
Кто ставил пробелы так виртуозно и мастерски?

ctrl+alt+L
3 авг 20, 09:29    [22176859]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
crutchmaster
Zzz79
сделал)))


Зачем херню сделал? Когда тест обратно покраснеет, как кто будет искать ошибку? Выдаст он у тебя fail, а что fail?

я так понимаю этот тест расчита на проверку шаблонов,которые лежат в ресурсках,периодически тестировщики их меняют и чтобы не поломалось пишутся вот такие тесты- как мне сказали это обычная практика.
3 авг 20, 10:19    [22176883]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5361
Zzz79
crutchmaster
пропущено...


Зачем херню сделал? Когда тест обратно покраснеет, как кто будет искать ошибку? Выдаст он у тебя fail, а что fail?

я так понимаю этот тест расчита на проверку шаблонов,которые лежат в ресурсках,периодически тестировщики их меняют и чтобы не поломалось пишутся вот такие тесты- как мне сказали это обычная практика.

Тебе сказали что обычная практика, но не объяснили.
Звучит странно что валидный Одинаковый xml или json или ini файл вдруг стал другим при пробеле.
Так что вопрос, нафиг такой юнит тест остается.
3 авг 20, 11:45    [22176951]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
lleming
Member

Откуда:
Сообщений: 1730
PetroNotC Sharp
Zzz79
пропущено...

я так понимаю этот тест расчита на проверку шаблонов,которые лежат в ресурсках,периодически тестировщики их меняют и чтобы не поломалось пишутся вот такие тесты- как мне сказали это обычная практика.

Тебе сказали что обычная практика, но не объяснили.
Звучит странно что валидный Одинаковый xml или json или ini файл вдруг стал другим при пробеле.
Так что вопрос, нафиг такой юнит тест остается.


сранно сравнивать json по как byte array.
3 авг 20, 14:44    [22177040]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
lleming
Member

Откуда:
Сообщений: 1730
{"hello": 22}
{
   hello: 22,
}

как JSON оба сэмпла одинаковые, как byte array разные. Просто нужно тестовые данные обозвать не *.json а *.jsonf например и добавить в idea исключения на форматирование такого расширения но открывать в редакторе как json
3 авг 20, 14:46    [22177042]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
lleming
{"hello": 22}
{
   hello: 22,
}

как JSON оба сэмпла одинаковые, как byte array разные. Просто нужно тестовые данные обозвать не *.json а *.jsonf например и добавить в idea исключения на форматирование такого расширения но открывать в редакторе как json

хорошая идея) надо будет опробовать
а так да - джейсон залетает то валидный,но идея его вот так сохраняет
есть еще путь в кастомный css запилить правила -у нас кстати он есть,но джейсон реадктируется дефолтно,так как не возникало таких проблем))
3 авг 20, 19:01    [22177156]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 560
вообщем там спасибо человеку кто посоветовал масивы в стринг засунуть и разницу посмотреть)

а вообще в реальности джейсон прихродит длинной строкой,идея его форматит в человекочитаемый фортмат
а это значит лишние пробелы и тд
при мапинге в объект это ни на что не влияет,но вот байт массивы будут разные,на понимание этого пришлось потратить день)
3 авг 20, 22:08    [22177206]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
mrWolf
Member

Откуда: Тридевятое царство
Сообщений: 83
lleming
как JSON оба сэмпла одинаковые

Вот это:
{
   hello: 22,
}
не JSON
вчера, 11:50    [22177336]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
lleming
Member

Откуда:
Сообщений: 1730
mrWolf
lleming
как JSON оба сэмпла одинаковые

Вот это:
{
   hello: 22,
}
не JSON


Про кавычки одинарные забыл. Но тут интересно что теперь firefox отказывается принимать одинарные кавычки сразу ошибка парсера.
Надо как быстро меняется мир
вчера, 20:37    [22177624]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1491
lleming
Надо как быстро меняется мир

json всегда был с кавычками в ключах по стандарту. Если firefox принимал именно json, то это разрабы firefox тогда обкурились. С другой стороны такой js код - валидин.

Сообщение было отредактировано: сегодня, 04:26
сегодня, 04:28    [22177707]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Java Ответить