code: def test_fillna_different_dtype(self, using_infer_string):
      # with different dtype (GH#3386)
      df = DataFrame(
          [
              ["a", "a", np.nan, "a"],
              ["b", "b", np.nan, "b"],
              ["c", "c", np.nan, "c"],
          ]
      )
  
      if using_infer_string:
          with tm.assert_produces_warning(
              FutureWarning, match="Downcasting"
          ):
              result = df.fillna({2: "foo"})
      else:
          result = df.fillna({2: "foo"})
      expected = DataFrame(
          [
              ["a", "a", "foo", "a"],
              ["b", "b", "foo", "b"],
              ["c", "c", "foo", "c"],
          ]
      )
      tm.assert_frame_equal(result, expected)
  
      if using_infer_string:
          with tm.assert_produces_warning(
              FutureWarning, match="Downcasting"
          ):
              return_value = df.fillna({2: "foo"}, inplace=True)
      else:
          return_value = df.fillna({2: "foo"}, inplace=True)
      tm.assert_frame_equal(df, expected)
      assert return_value is None
  
imports: import numpy
  import pytest
  from pandas._config import using_pyarrow_string_dtype
  from pandas import Categorical, DataFrame, DatetimeIndex, NaT, PeriodIndex, Series, TimedeltaIndex, Timestamp, date_range, to_datetime
  import pandas._testing
  from pandas.tests.frame.common import _check_mixed_float
label_desc: Use image node_id 7 for calling the TestFillNA obj's underlying member method code with example usage: obj.test_fillna_different_dtype(using_infer_string) without return types