Empty component hierarchy sometimes
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- java
- Área
- desktop, testing-qa
Línea de trabajo
Empieza con AdhocTradeEntryDlgTest.testAmendETFuture y su método auxiliar setupDialog(), y ejecútalo después bajo CacioTestRunner en Linux para reproducir la jerarquía vacía intermitente. Sigue el fallo a través de DialogFixture y BasicComponentFinder, y compara las ejecuciones con y sin pack(). Se considera terminado cuando se haya identificado la causa y el test ya no falle intermitentemente al encontrar amendmentReasonLabel.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
This is probably more suited to a mailing list / forum, but the mail list comment appeared to point me here.
I have a unit test which tests a dialog. I am using cacio-tta to enable it to run headless. This seems to run reliably in Windows and much of the time in Linux ... but maybe half of the time in linux the component lookup fails. When it fails, the component hierarchy is empty.
The failure looks as follows (I am running under junit4 with the CacioTestRunner)
org.assertj.swing.exception.ComponentLookupException: Unable to find component using matcher org.assertj.swing.core.NameMatcher[name='amendmentReasonLabel', type=javax.swing.JLabel, requireShowing=true].
Component hierarchy:
com.ccm.backtest.fund.AdhocTradeEntryDlg[name='dialog1', title='Amend Trade', enabled=true, modal=true, visible=true, showing=true]
at org.assertj.swing.core.BasicComponentFinder.componentNotFound(BasicComponentFinder.java:290)
at org.assertj.swing.core.BasicComponentFinder.find(BasicComponentFinder.java:275)
at org.assertj.swing.core.BasicComponentFinder.find(BasicComponentFinder.java:268)
at org.assertj.swing.core.BasicComponentFinder.findByName(BasicComponentFinder.java:203)
at org.assertj.swing.fixture.AbstractContainerFixture.findByName(AbstractContainerFixture.java:622)
at org.assertj.swing.fixture.AbstractContainerFixture.label(AbstractContainerFixture.java:291)
at com.ccm.backtest.fund.AdhocTradeEntryDlgTest.testAmendETFuture(AdhocTradeEntryDlgTest.java:103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
The relevant test code that is failing is...
@Test
public void testAmendETFuture()
{
MockAssetFactory assetFactory = new MockAssetFactory();
Date today = java.sql.Date.valueOf("2015-01-02");
ETFuture future = new ETFuture(today, assetFactory.get("FTH16"), 2, Side.SELL, 1.234, today);
future.setBrokerageFee(2.34, assetFactory.get("CAD"));
future.setClearingFee(5.67, assetFactory.get("EUR"));
setupDialog("book", future, assetFactory, AdhocTradeEntryDlg.Operation.AMEND);
dialogFixture.label("amendmentReasonLabel").requireVisible();
where the setupDialog() code looks like:
private void setupDialog(String book, Transaction trade, IAssetFactory assetFactory, AdhocTradeEntryDlg.Operation operation)
{
dialog = GuiActionRunner.execute(new GuiQuery<AdhocTradeEntryDlg>()
{
protected AdhocTradeEntryDlg executeInEDT()
{
AdhocTradeEntryDlg dlg = new AdhocTradeEntryDlg(book, trade, assetFactory, operation);
dlg.pack();
return dlg;
}
});
// IMPORTANT: note the call to 'robot()'
// we must use the Robot from AssertJSwingJUnitTestCase
dialogFixture = new DialogFixture(robot(), dialog);
dialogFixture.show(new Dimension(800, 800));
}
I added the pack() call which makes the issue appear less often ... and so I am guessing there is a synchronisation issue at play here. The other interesting thing is that there are 4 almost identical tests in this test case - they all call setupDialog (it's not in onSetUp because there is more than one flavor as I require different tests to call different constructors for the object).
What would be a good way to debug this?
Ian
- Lenguaje dominante
- Java
- Estrellas
- 121
- Forks
- 52
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de assertj/assertj-swing
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
assertj/assertj-swing#279 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 48/100
assertj/assertj-swing#278 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
assertj/assertj-swing#276 · 1 comentario ·
-
Update unit test to avoid deprecated `ExpectedException.none()` by using `Assert.assertThrows()` Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
assertj/assertj-swing#275 ·
-
how to test when headless? Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
assertj/assertj-swing#277 · 1 comentario ·
Todos los issues de assertj/assertj-swing
Issues similares
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Abiertoarea/plugin
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
kestra-io/plugin-kestra#190 ·
-
litertlm-android AAR ships no consumer ProGuard rules → "mid == null" SIGABRT in minified apps Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
google-ai-edge/LiteRT-LM#3739 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Add canonical URLs and a sitemap Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
integra-team-red/meet-map#249 ·
-
[Studio][Bug] Cancelled create-user dialog keeps the password and admin switch for the next attempt Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
apache/rocketmq-dashboard#5064 ·