For over 35 years, PostgreSQL has been quietly building a reputation for reliability and performance. But why is it now becoming popular among enterprises?
Do you ever pull your hair out in frustration, asking why isn't this part of the Java API? Thanks to Manifold, you can solve that problem for everyone.
Explore an open-source, standards-based, cloud-native observability platform that helps control the speed, scale, and complexity of a cloud-native financial payments architecture.
As more personal information is being collected and analyzed by organizations, the need to protect an individual's privacy and prevent the misuse or unauthorized access of the personal data comes with it.
This guide explores how to auto-scale your Kinesis Data Streams consumer applications on Kubernetes so you can save on costs and improve resource efficiency.
Deploying deep learning on embedded platforms involves optimizing models and ensuring real-time performance for efficient execution and unlocking new possibilities.
Discover how containerization is revolutionizing software development and deployment in the era of DevOps. Enhanced business agility with this technology.
This article takes a journey into the future of cloud computing, discussing emerging trends such as autonomous and distributed cloud-generative AI tools.
People like to complain about MongoDB. For instance, maybe they feel that it ruined their social network, or any number of other less recent complaints. The debate gets so heated, though, that sometimes valid criticisms - and nothing is above criticism - are dismissed as bandwagon hatred. It's a problem that Slava Kim seems very aware of in this recent blog post on some of the syntactic weirdnesses of MongoDB. It's not bashing, Kim stresses. For developers to effectively use any technology, they need to understand the "sharp edges." Kim goes into detail for each warning, covering five general areas: "Keys order in a hash object" "undefined, null and undefined" "Soft limits, hard limits and no limits" "Special treatment for arrays" "$near geo-location operator" Check out the full article for all the details on what aspects of MongoDB may cause some problems or frustration down the line.
Everybody's trying to get in on the big-money future of IoT, and now "everybody" includes Microsoft with Windows 10. Larry Dignan at ZDNet put together a look at Windows 10's role in IoT - as it's been described by Microsoft CEO Satya Nadella at the Gartner Symposium ITXpo, at least - which suggests that the new OS will be a central platform for IoT systems of all types. Specifically: Windows will be able to run on everything from sensors to wearables to whatever computing shift emerges. Or, as Patrick Thibodeau at ComputerWorld interpreted it: [Nadella] sees the company's upcoming operating system Windows 10 as integral in managing every aspect of the IoT, from the sensors, mechanical systems, to the applications and analytics that underlie it. Those are some pretty big promises, but as Nadella said, Windows 10 is "the first step in a new generation of Windows as opposed to just another release after Windows 8." After all, that would be Windows 9, right? Check out Dignan and Thibodeau's coverage of Nadella at the Gartner Symposium ITXpo for more details on Windows 10 in general. It looks like a promising future: Yo Ebola, I'ma let you finish but #Windows10 is gonna have the greatest virus of all time #WindowsTillIDie — Bill Gates (@BillKingGates) October 6, 2014
My last article raised an interesting discussion whether you should see tests more as documentation or more as specification. I agree that they can contribute to both of them, but I still think tests are just - tests... There were also complaints about my statement that testing often becomes tedious work which nobody likes. Also here I agree, that techniques like TDD can help you to structure your code and make sure you code exactly what is needed by writing the tests, but the result of the process will still be a class which needs to be tested somehow. So I have set up another small challenge to show how the visual approach featured by MagicTest helps to make testing a breeze. As you know, traditional assertion-based test frameworks like TestNG or JUnit force us to include the expected results in the test code. Where this may be more or less suitable for simple tests (like in the previous article), it quickly becomes cumbersome if the test handles complex objects or voluminous data. The Task We must test the method createEvenOddTable() (see appended ) with the following functionality: Create HTML table (elements table, tr, td) with specified number of data rows and columns. An additional row will be added to store header information (element th). An additional column will be added which contains the row number (element th) The rows will have attribute class set to "head", "even", or "odd" for easy styling. Both the specification (the 4 lines above) and the source code itself (25 lines) are short and simple to understand, so any experienced developer will write this method in a few minutes. So what's the problem with testing this method? We will see if we look at how MagicTest handles this case. The Magic Test The MagicTest for this method looks like this: public class HtmlTableTest { @Trace public void testCreateEvenOddTable() { HtmlTable.createEvenOddTable(4, 3); } @Formatter(outputType=OutputType.TEXT) public static String formatElement(Element elem) { XMLOutputter serializer = new XMLOutputter(); serializer.setFormat(Format.getPrettyFormat()); return serializer.outputString(elem); } } Some details: We use the @Trace annotation to automatically capture information about calls to the method under test. We rely on naming conventions, so the method HtmlTable.createEvenOddTable() is tested by HtmlTableTest.testCreateEvenOddTable(). Per default, MagicTest uses the toString() method to report the parameter and return values. As the Element's toString() method returns only its name, we have to define a custom @Formatter to get the full XML tree. If we run the test, we get the following report: If we look at the XML element tree in the report, we can see all the details which a complete test should cover: correct nesting of elements (table, tr, td), correct header line, correct line numbers, correct number of rows, correct number of cells for each row, correct class attribute for each row, etc. But even if you end up with a bunch of lengthy assert statements like assert("head".equals(((Element) elem.getChildren("tr").get(0)).getAttributeValue("class"))); which tests for the correct class attribute, this will not be enough: you should also test the absence of the class attribute for all cells except the first ones in each row. So yes, for a sound test you must actually verify the whole XML tree - and this is exactly the information which MagicTest shows you for confirmation. Let the Challenge Begin To run the test yourself, you will need to download the MagicTest Eclipse plug-in. Copy it into the Eclipse dropins folder and restart Eclipse. Then download the attached Eclipse project and import it into your workspace. Run the test class TagsTest by executing Run As / MagicTest. After the first run, the test report will show up and all test steps will be red. This is the MagicTest way of telling you that a step has failed. In our case, the steps just fail because MagicTest simply does not know anything about the expected result. So we carefully check the output and confirm its correctness by clicking on the save button. Now all steps are green - and the test is successful. You have now seen how efficiently this test can be realized using MagicTest - it even looked like fun. Does your test tool accept the challenge? How many minutes and lines does it take you to write the test? I'm looking forward to your contributions! Appendix: Listing HtmlTable /** * Create HTML table (elements table, tr, td) with specified number of data rows and columns. * An additional row will be added to store header information (element th). * An additional column will be added which contains the row number (element th) * The rows will have attribute class set to "head", "even", or "odd" for easy styling. * * @param rows number of rows * @param cols number of column * @return XML element containing the HTML table */ public static Element createEvenOddTable(int rows, int cols) { Element table = new Element("table"); for (int r=0; r 0) { td.setText(Integer.toString(r)); } } } return table; }