{"id":"https://openalex.org/W7160951831","doi":"https://doi.org/10.5381/jot.2026.25.2.a2","title":"Implementing a Java testing framework from scratch without reflection.","display_name":"Implementing a Java testing framework from scratch without reflection.","publication_year":2026,"publication_date":"2026-01-01","ids":{"openalex":"https://openalex.org/W7160951831","doi":"https://doi.org/10.5381/jot.2026.25.2.a2"},"language":"en","primary_location":{"id":"doi:10.5381/jot.2026.25.2.a2","is_oa":true,"landing_page_url":"https://doi.org/10.5381/jot.2026.25.2.a2","pdf_url":null,"source":{"id":"https://openalex.org/S172897590","display_name":"The Journal of Object Technology","issn_l":"1660-1769","issn":["1660-1769"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4383699229","host_organization_name":"EtH Zurich","host_organization_lineage":["https://openalex.org/P4383699229"],"host_organization_lineage_names":["EtH Zurich"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"The Journal of Object Technology","raw_type":"journal-article"},"type":"article","indexed_in":["crossref"],"open_access":{"is_oa":true,"oa_status":"diamond","oa_url":"https://doi.org/10.5381/jot.2026.25.2.a2","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5083629281","display_name":"Lorenzo Bettini","orcid":"https://orcid.org/0000-0002-4481-8096"},"institutions":[],"countries":[],"is_corresponding":true,"raw_author_name":"Lorenzo Bettini","raw_affiliation_strings":[],"raw_orcid":null,"affiliations":[]}],"institutions":[],"countries_distinct_count":0,"institutions_distinct_count":0,"corresponding_author_ids":["https://openalex.org/A5083629281"],"corresponding_institution_ids":[],"apc_list":null,"apc_paid":null,"fwci":0.0,"has_fulltext":true,"cited_by_count":0,"citation_normalized_percentile":{"value":0.54775748,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":null,"biblio":{"volume":"25","issue":"2","first_page":"2:37","last_page":"2:37"},"is_retracted":false,"is_paratext":false,"is_xpac":false,"primary_topic":{"id":"https://openalex.org/T10743","display_name":"Software Testing and Debugging Techniques","score":0.8543000221252441,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},"topics":[{"id":"https://openalex.org/T10743","display_name":"Software Testing and Debugging Techniques","score":0.8543000221252441,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10533","display_name":"Teaching and Learning Programming","score":0.019099999219179153,"subfield":{"id":"https://openalex.org/subfields/1706","display_name":"Computer Science Applications"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T12490","display_name":"Software Engineering and Design Patterns","score":0.011599999852478504,"subfield":{"id":"https://openalex.org/subfields/3303","display_name":"Development"},"field":{"id":"https://openalex.org/fields/33","display_name":"Social Sciences"},"domain":{"id":"https://openalex.org/domains/2","display_name":"Social Sciences"}}],"keywords":[{"id":"https://openalex.org/keywords/scratch","display_name":"Scratch","score":0.8177000284194946},{"id":"https://openalex.org/keywords/java","display_name":"Java","score":0.6700999736785889},{"id":"https://openalex.org/keywords/software-testing","display_name":"Software testing","score":0.4381999969482422},{"id":"https://openalex.org/keywords/unit-testing","display_name":"Unit testing","score":0.3463999927043915}],"concepts":[{"id":"https://openalex.org/C2781235140","wikidata":"https://www.wikidata.org/wiki/Q275131","display_name":"Scratch","level":2,"score":0.8177000284194946},{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.7976999878883362},{"id":"https://openalex.org/C548217200","wikidata":"https://www.wikidata.org/wiki/Q251","display_name":"Java","level":2,"score":0.6700999736785889},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.5692999958992004},{"id":"https://openalex.org/C2984328558","wikidata":"https://www.wikidata.org/wiki/Q188522","display_name":"Software testing","level":3,"score":0.4381999969482422},{"id":"https://openalex.org/C115903868","wikidata":"https://www.wikidata.org/wiki/Q80993","display_name":"Software engineering","level":1,"score":0.42879998683929443},{"id":"https://openalex.org/C111919701","wikidata":"https://www.wikidata.org/wiki/Q9135","display_name":"Operating system","level":1,"score":0.41929998993873596},{"id":"https://openalex.org/C148027188","wikidata":"https://www.wikidata.org/wiki/Q907375","display_name":"Unit testing","level":3,"score":0.3463999927043915},{"id":"https://openalex.org/C149635348","wikidata":"https://www.wikidata.org/wiki/Q193040","display_name":"Embedded system","level":1,"score":0.25290000438690186},{"id":"https://openalex.org/C132106392","wikidata":"https://www.wikidata.org/wiki/Q1373903","display_name":"Real time Java","level":3,"score":0.25049999356269836}],"mesh":[],"locations_count":2,"locations":[{"id":"doi:10.5381/jot.2026.25.2.a2","is_oa":true,"landing_page_url":"https://doi.org/10.5381/jot.2026.25.2.a2","pdf_url":null,"source":{"id":"https://openalex.org/S172897590","display_name":"The Journal of Object Technology","issn_l":"1660-1769","issn":["1660-1769"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4383699229","host_organization_name":"EtH Zurich","host_organization_lineage":["https://openalex.org/P4383699229"],"host_organization_lineage_names":["EtH Zurich"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"The Journal of Object Technology","raw_type":"journal-article"},{"id":"pmh:oai:flore.unifi.it:2158/1472314","is_oa":true,"landing_page_url":"https://hdl.handle.net/2158/1472314","pdf_url":null,"source":{"id":"https://openalex.org/S4306402033","display_name":"Florence Research (University of Florence)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I45084792","host_organization_name":"University of Florence","host_organization_lineage":["https://openalex.org/I45084792"],"host_organization_lineage_names":[],"type":"repository"},"license":"other-oa","license_id":"https://openalex.org/licenses/other-oa","version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":null,"raw_type":"info:eu-repo/semantics/article"}],"best_oa_location":{"id":"doi:10.5381/jot.2026.25.2.a2","is_oa":true,"landing_page_url":"https://doi.org/10.5381/jot.2026.25.2.a2","pdf_url":null,"source":{"id":"https://openalex.org/S172897590","display_name":"The Journal of Object Technology","issn_l":"1660-1769","issn":["1660-1769"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4383699229","host_organization_name":"EtH Zurich","host_organization_lineage":["https://openalex.org/P4383699229"],"host_organization_lineage_names":["EtH Zurich"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"The Journal of Object Technology","raw_type":"journal-article"},"sustainable_development_goals":[],"awards":[],"funders":[],"has_content":{"pdf":false,"grobid_xml":false},"content_urls":null,"referenced_works_count":0,"referenced_works":[],"related_works":[],"abstract_inverted_index":{"Java":[0,22,76,140],"reflection":[1,31,73],"allows":[2],"a":[3,16,75,133,138,147],"program":[4,9],"to":[5,38,51],"inspect":[6],"and":[7,14,41,87,96,105,114],"manipulate":[8],"structure":[10],"at":[11],"run":[12,39],"time":[13,37,40],"is":[15,48],"powerful":[17],"mechanism":[18],"used":[19],"in":[20],"many":[21],"frameworks,":[23],"including":[24],"testing":[25,77,141],"frameworks":[26],"such":[27],"as":[28,132],"JUnit.":[29],"However,":[30],"shifts":[32],"key":[33],"checks":[34],"from":[35,80],"compile":[36],"can":[42,57,143],"introduce":[43],"runner-level":[44],"overhead;":[45],"therefore,":[46],"it":[47,53],"often":[49],"desirable":[50],"avoid":[52],"when":[54],"comparable":[55],"functionality":[56],"be":[58,144],"achieved":[59],"with":[60],"ordinary,":[61,151],"statically":[62,152],"checked":[63,153],"mechanisms.":[64,155],"In":[65],"this":[66],"paper,":[67],"we":[68],"present":[69],"JNRTEST":[70,92,130],"(Java":[71],"no":[72],"Test),":[74],"framework":[78,142],"built":[79,145],"scratch":[81],"that":[82,137],"avoids":[83],"reflection,":[84],"runtime":[85],"annotations,":[86],"dynamic":[88],"class":[89],"loading.":[90],"Instead,":[91],"relies":[93],"on":[94],"object-oriented":[95],"functional":[97],"programming":[98],"mechanisms":[99],"provided":[100],"by":[101,117],"modern":[102],"Java:":[103],"tests":[104],"lifecycle":[106],"hooks":[107],"are":[108,122],"registered":[109],"through":[110],"explicit,":[111],"typed":[112],"APIs":[113],"executed":[115],"directly":[116],"the":[118],"runner,":[119],"while":[120],"integrations":[121],"implemented":[123],"via":[124],"an":[125],"event-driven":[126],"listener":[127],"model.":[128],"Overall,":[129],"serves":[131],"proof":[134],"of":[135],"concept":[136],"practical":[139],"around":[146],"reflection-free":[148],"core":[149],"using":[150],"language":[154]},"counts_by_year":[],"updated_date":"2026-05-13T06:11:35.469786","created_date":"2026-05-13T00:00:00"}
