I am new to Android Testing (both Unit and Espresso testing). I can set rule
val activityTestRule = ActivityTestRule<MainActivity>(MainActivity::class.java)
when I want to create espresso test for MainActivity.
yet, I found this blog to do this, but I'm not willing to use external libraries (if possible) for this.
So, what is the alternative of this for fragment (any kind of) testing?
But I am using Navigation UI with BottomNavigation, I want to test my fragments which are inside the navigation.
Help me how can I do that and obviously a proper way?
Related
Is there a way that learning front end development helps with a deeper test automation? Or is mastering locators and Java automated scripts in Selenium enough?
you need first step knowledge about HTML/JS/css, because you have to be able to localize element in the DOM, theirs states...
by this way you can write a program to click on that the button, or check if a modal is well displayed...
Also with tool like ranorex you need some skill in C# to implement some behaviors for your auto-test
I have a few problems with understanding of android tv development. First of all when i had launched android tv project and was trying to create custom interface for new activity, unfortunately i couldn't find any xml elements which could help me. From the example i got some ideas that whole interface provided by android SDK collected in many fragments. I just can modify colors, fonts, fonts size, transparency maybe animation and etc. But if i really need to customize structure of controls and WTF i wanna output "Hello World" inside label!!! Is it possible? I read all articles from this link https://developer.android.com/training/tv/index.html but it is still useless for me (maybe I am unique :) ). After this suffering with google guide, i have done a conclusion that the platform so new and there is no way to do some thing except only way that was provided by google. Am i right? If not, what should i do to find successful way?
The fragments provided by Google as part of the "leanback" framework are templates designed to make it easy for content providers to start publishing to Android TV without having to worry about the technical details of building a TV UI. The idea is that a content provider can create a channel just by feeding in their video content. This ease of use comes at a cost, customization is difficult or impossible with these templates.
However there is nothing preventing you from creating your own Activities and Fragments from scratch and implementing a completely custom UI for the TV, it works just like any other Android device. Add "android.intent.category.LEANBACK_LAUNCHER" to your manifest and see for yourself.
We're currently researching if it is possible to on the fly generate/change the UI of a metro app. So far I have seen only that the reflection options are somewhat limited. But perhaps if we're using HTML/JS we can modify the HTML on the fly? Anybody tried something like this?
Will fire up VS later and give it a go, just thought I'd ask here and see if we could have a disucssion on the topic.
Most Javascript-based apps modify their HTML on the fly as this is a pattern promoted by the Navigator template. So for example even just clicking a link and navigating to another page will replace the content of a 'page' container element instead of reloading the whole page and thus reloading all .js and .css files.
Also the WinJS.UI.ListView will dynamically create and reposition elements in your DOM as you scroll its contents.
Basically you can do anything you'd do in a webapp and re-use patterns like known from AJAX to make your UI adapt dynamically.
Depending on what you want to achieve, you should with increasing complexity keep in mind that your app should be able to suspend and restore its state from scratch at any point.
Hey guys!
We used to write our UnitTests with FlexUnit and we were just testing our model. Now we want to test the view too. Before i run my tests i create an instance of my view and my model to test the stuff. When i try to access the view i get a null pointer exception. If i add the view to the displaylist it somehow works - even if i remove it from the list right after adding.
it looks something like this:
var myView: MyView = new myView();
//myView.initialize(); will throw error
Application.application.addChild(view);
Application.application.removeChild(view);
myView.initialize(); // will work
Hope you can give me a hint.
Sims
Flex UIComponents do not walk through the component lifecycle until after they are added to a container. As such, variables may not be initialized and children may not be created if you never add it to a container.
More info on the Flex Component LifeCycle. You'll notice there are 11 steps after the component is added to the container.
I suspect that adding it, then removing it, could cause other issues but it depends what you're trying to test.
To know your exact error, we'd have to see what code is in the initialize method on the view. Most likely it accesses a child that was not created yet.
MXML components will often masks the lifecycle steps, but a component will still go through them.
I hope this helps; but since you didn't ask a question I'm not sure if that was the information you were after.
In addition to what (www.Flextras.com) wrote, which I was just about to post as well, you might consider a different approach to testing your views.
First, consider a separation pattern like Presentation Model, MVP or MVC. They allow you to separate your view from your view behavior and test the behavior separate from the view. An approach like this, when done correctly, will take you a long way because you minimize or eliminate the AS3 code in your view.
If you really want to test your views, I would suggest that you use a functional testing tool for this. Unit test frameworks are good for testing classes in isolation. Once you start talking about views, which have complicated lifecycles, a functional testing framework starts to make sense.
Look at FlexMonkey as an example of a functional UI testing framework for Flex.
I recommend you to use User Interface Facade described here or here. This functionality is designed specially for UI componets testing.
Has anyone had any luck testing a Flex app without static Automation IDs attached to components? All of the elements in the apps are generated .....
We've investigated FlexMonkey but it appears to be incompatible with any app that utilizes the ExternalInterface. RIATest's scripting language leaves much to be desired...
Thanks-
Jonathan
Unfortunately I don't know much about this kind of stuff, but I went to a talk that presented these tools for TDD:
- Hudson
- Flex Unit 4
I guess there are tutorials online, don't know if it helps with ExternalInterface testing.
Is there anything that prevents you from generating appropriate automationNames for your generated components? This way you should be able to refer to them properly in automation tools.
Are there any other non-changing properties that your generated components have, like maybe 'id'? If so you can use these properties to address the components. This is definitely possible in RIATest.
FunFX is a Flex automation tool that allows you to access components via ID, "automation name", "automation value" or index. While using something like the component index might be less than ideal for robust tests, if that's all that's stable, it might be worth a try. And it's written in Ruby, so that should satisfy any "real programming language" related requirements. :)
We added an "automationPrefix" property to many of our custom controls (particularly those that are reused many times on a single screen), and wrote code to append the beginning of the automationName property on any child controls. Setting the automationName was the most important parting of enabling automation testing on our Flex apps. There are several ways you could modify the automationName to be unique without making it completely static at the level that most test automation packages need it. We are currently using QTP as the test automation tool of choice.