### Question:
FabricUIManager implements UIManager, JSHandler { @Nullable @DoNotStrip public ReactShadowNode createNode( int reactTag, String viewName, int rootTag, ReadableNativeMap props, long eventTarget) { if (DEBUG) { FLog.d(TAG, "createNode \n\ttag: " + reactTag + "\n\tviewName: " + viewName + "\n\trootTag: " + rootTag + "\n\tprops: " + props); } try { ViewManager viewManager = mViewManagerRegistry.get(viewName); ReactShadowNode node = viewManager.createShadowNodeInstance(mReactApplicationContext); ReactShadowNode rootNode = getRootNode(rootTag); node.setRootTag(rootNode.getReactTag()); node.setViewClassName(viewName); node.setInstanceHandle(eventTarget); node.setReactTag(reactTag); node.setThemedContext(rootNode.getThemedContext()); ReactStylesDiffMap styles = updateProps(node, props); if (!node.isVirtual()) { mUIViewOperationQueue.enqueueCreateView( rootNode.getThemedContext(), reactTag, viewName, styles); } return node; } catch (Throwable t) { handleException(getRootNode(rootTag), t); return null; } } FabricUIManager(
      ReactApplicationContext reactContext,
      ViewManagerRegistry viewManagerRegistry,
      JavaScriptContextHolder jsContext,
      EventDispatcher eventDispatcher); void setBinding(FabricBinding binding); @Nullable @DoNotStrip ReactShadowNode createNode(
      int reactTag, String viewName, int rootTag, ReadableNativeMap props, long eventTarget); @Nullable @DoNotStrip ReactShadowNode cloneNode(ReactShadowNode node); @Nullable @DoNotStrip ReactShadowNode cloneNodeWithNewChildren(ReactShadowNode node); @Nullable @DoNotStrip ReactShadowNode cloneNodeWithNewProps(
      ReactShadowNode node, @Nullable ReadableNativeMap newProps); @Nullable @DoNotStrip ReactShadowNode cloneNodeWithNewChildrenAndProps(
      ReactShadowNode node, ReadableNativeMap newProps); @Nullable @DoNotStrip void appendChild(ReactShadowNode parent, ReactShadowNode child); @DoNotStrip List<ReactShadowNode> createChildSet(int rootTag); @DoNotStrip void appendChildToSet(List<ReactShadowNode> childList, ReactShadowNode child); @DoNotStrip synchronized void completeRoot(int rootTag, @Nullable List<ReactShadowNode> childList); void dispatchCommand(int reactTag, int commandId, @Nullable ReadableArray commandArgs); @Override @DoNotStrip int addRootView(
      final T rootView); @Override @DoNotStrip synchronized void updateRootLayoutSpecs(int rootViewTag, int widthMeasureSpec, int heightMeasureSpec); void removeRootView(int rootTag); @Nullable @DoNotStrip long getEventTarget(int reactTag); @DoNotStrip void registerEventHandler(long eventHandlerPointer); @DoNotStrip void releaseEventTarget(long eventTargetPointer); @DoNotStrip void releaseEventHandler(long eventHandlerPointer); @Override @DoNotStrip void invoke(long eventTarget, String name, WritableMap params); @Override void setJSResponder(int reactTag, boolean blockNativeResponder); @Override void clearJSResponder(); @Override void initialize(); @Override void onCatalystInstanceDestroy(); @Override void profileNextBatch(); @Override Map<String, Long> getPerformanceCounters();  }### Answer:
@Test public void testCreateNode() { ReactRootView rootView = new ReactRootView(RuntimeEnvironment.application.getApplicationContext()); int rootTag = mFabricUIManager.addRootView(rootView); int reactTag = mNextReactTag++; String viewClass = ReactViewManager.REACT_CLASS; ReactShadowNode node = mFabricUIManager.createNode(reactTag, viewClass, rootTag, null, randomInstanceHandle()); assertThat(reactTag).isEqualTo(node.getReactTag()); assertThat(viewClass).isEqualTo(node.getViewClass()); assertThat(rootTag).isEqualTo(rootTag); }