More seriously than the repetition of the call to DefaultAction is the style itself because the code is written non-orthogonal
(see [this answer][1] for good resons for writing orthogonally).

To show why non-orthogonal code is bad consider the original example,
when a new requirement that we should not open the file if it is stored
on a network disk is introduced. Well, then we could just update the code to
the following:

    if(FileExists(file))
    {
        if(! OnNetworkDisk(file))
        {
            contents = OpenFile(file); // <-- prevents inclusion in if
            if(SomeTest(contents))
            {
                DoSomething(contents);
            }
            else
            {
                DefaultAction();
            }
        }
        else
        {
            DefaultAction();
        }
    }
    else
    {
        DefaultAction();
    }

But then there also comes a requirement that we should not open large files over 2Gb either.
Well, we just update again:

    if(FileExists(file))
    {
        if(LessThan2Gb(file))
        {
            if(! OnNetworkDisk(file))
            {
                contents = OpenFile(file); // <-- prevents inclusion in if
                if(SomeTest(contents))
                {
                    DoSomething(contents);
                }
                else
                {
                    DefaultAction();
                }
            }
            else
            {
                DefaultAction();
            }
        else
        {
            DefaultAction();
        }
    }
    else
    {
        DefaultAction();
    }

It should be very clear that such code style will be a huge maintenance pain.

Among the answers here which is written properly orthogonally are [Abyx' second example][2] and [Jan Hudec's answer][3], so I will not repeat that, just point out that adding the two requirements in those answers would just be 

    if(! LessThan2Gb(file))
        return null;

    if(OnNetworkDisk(file))
        return null;

(or `goto notexists;` instead of `return null;`), **not affecting any other code than those lines added**. E.g. orthogonal.

When testing, the general rule should be to [test exceptions, not the normal case][4].


  [1]: http://stackoverflow.com/a/3272062/23118
  [2]: http://programmers.stackexchange.com/a/122488/11110
  [3]: http://programmers.stackexchange.com/a/122508/11110
  [4]: http://stackoverflow.com/a/223881/23118